我偶然发现了一个我要解决的问题。
“编写一个函数,该函数接受整数向量,并在输入为偶数时返回逻辑向量TRUE,在输入为奇数时返回FALSE,在输入为非限定时返回NA(即Inf,-Inf ,NA,NaN)。请检查它是否可用于正,负,零和无限输入。”
f <- function(x,y)
{
if (x==Inf)
{
print ("NA")
}else
if(x%%2=0)
{print ("TRUE")
}else
{print("FALSE")}
if (y==Inf)
{print("NA")
}
else
if (y%%2==0)
{print ("TRUE")
} else
{print ("FALSE")
}
print(c(x+y, x-y, x^4-y^3, x^2+y^2, y*x))
}
通过我的眼睛,我看不到哪里出了问题。我收到错误代码,提示“错误:“}”中的“}””
任何指导将不胜感激。
答案 0 :(得分:2)
您可以稍微缩短功能并编写
f <- function(x) { x %% 2 == 0 }
测试
f(c(1:6, Inf, -Inf, NA, NaN))
# [1] FALSE TRUE FALSE TRUE FALSE TRUE NA NA NA NA
答案 1 :(得分:1)
当前方法的问题是您试图对向量进行操作,但是if
-else
逻辑实际上是要对标量(即单个值)进行操作。我建议使用矢量化解决方案,例如ifelse()
函数。我们可以将对ifelse
的调用链接在一起,但在这里使用case_when
包中的dplyr
可能会更容易:
library(dplyr)
f <- function(x) {
result <- case_when(
x %% 2 == 0 ~ TRUE,
x %% 2 == 1 ~ FALSE,
is.infinite(x) ~ NA,
is.nan(x) ~ NA,
TRUE ~ NA
)
return(result)
}
编辑:
我更喜欢@markus的答案,这可能正是您的老师所期望的。但是如上所述,使用case_when
可以使您期望的映射变得明确。因此,从代码清晰的角度来看,这是完全清楚的。