提问人:ronzenith 提问时间:7/27/2019 最后编辑:NelsonGonronzenith 更新时间:7/27/2019 访问量:2637
如何创建一个返回 2 个整数之和的函数?
How to Create a function that will return the sum of 2 integers?
问:
我遇到了一个简单的问题,但无法编写代码。如果你能帮助我,不胜感激。
问题:创建一个函数,该函数将返回 2 个整数的总和。
我的代码:
q1 <- function(a, b) {
if (a == as.integer(a)) {
if (b == as.integer(b)) {
result1 <- a + b
}
}
} else {
result1 <- NA
result1
}
q1(3,6) - 假设它返回 9
q1(3.1,6) - 假设它返回 NA
顺便说一句,为什么我不能用这种方式写语法?if(is.integer(a) = TRUE){
答:
0赞
user123
7/27/2019
#1
您放错了一些括号,并且没有返回任何内容,请检查以下内容:
q1 <- function(a,b){
if (a == as.integer(a)){
if (b == as.integer(b)){
result1 <- a + b
}
}
else {
result1 <- NA
}
return(result1);
}
0赞
fabla
7/27/2019
#2
如果你希望你的函数只整数,就像在对象中一样。sum()
R
Intsum <- function(a,b){
if(is.integer(a) & is.integer(b) == TRUE){
return(sum(a,b))
}
else {
return(NA)
}
}
1赞
Rui Barradas
7/27/2019
#3
这在这个答案中使用了一个函数 (),略有编辑。它检查某个值是否与现在推荐的 .testInteger
TRUE
isTRUE()
testInteger <- function(x){
test <- all.equal(x, as.integer(x), check.attributes = FALSE)
isTRUE(test)
}
q1 <- function(a, b) {
if (testInteger(a) && testInteger(b)) {
a + b
} else {
NA
}
}
q1(3, 6) # returns 9
q1(3.1, 6) # returns NA
1赞
utubun
7/27/2019
#4
取决于您决定的整数。通常你不需要将整数存储为类的对象:integer
整数向量的存在使数据可以传递给期望它们的 C 或 Fortran 代码,并且(小)整数数据可以准确而紧凑地表示。
所以,是整数,在 R 中表示为(尝试看到它)。所以我认为,我们不需要检查传递给函数的值的类,而是检查这些数字是否是具有一定容差的整数。3
numeric
class(3)
sum_int <- function(..., tol = .Machine$double.eps^.5){
if(any(abs(round(c(...)) - c(...)) > tol)){
return(NA)
}
return(sum(round(c(...))))
}
sum_int(1, 2, 3 + 1e-7)
#NA
sum_int(1, 2, 3 + 1e-15)
#6
sum_int(1, 2, 3 + 1e-15, tol = 0)
#NA
sum_int(1, 2, 3.1, tol = .02)
#NA
sum_int(1, 2, 3.1, tol = .2)
#6
在第一步中,我们获取传递给 .为了确定这些值是否为整数,我们使用预定义或由用户容差级别定义的值(其定义方式与示例中所示相同)。之后,我们将数值四舍五入,使它们成为整数,并找到这些值的小数部分,作为参数的整个部分和参数本身之间的绝对差。如果任何分数超过公差水平 - 我们返回 NA。否则,我们将返回这些值的整个部分的总和。sum_int()
tol
?is.integer
评论
integer