在R中,当我尝试通过ifelse
分配函数时,出现以下错误:
> my.func <- ifelse(cond, sqrt, identity)
Error in rep(yes, length.out = length(ans)) :
attempt to replicate an object of type 'builtin'
如果cond
为FALSE
,则错误看起来相同,R抱怨
attempt to replicate an object of type 'closure'
如何将两个函数之一分配给变量以及此处发生了什么?
答案 0 :(得分:5)
由于ifelse
是矢量化的,并且不为非矢量化条件提供特殊情况,因此参数将与rep(...)
一起复制。 rep(...)
无法进行闭包,例如在示例中。
解决方法是临时包装函数:
my.func <- ifelse(cond, c(sqrt), c(identity))[[1]]
答案 1 :(得分:1)
if...else
而不是矢量化ifelse
方法:
my.func <- if (cond) sqrt else identity