2014-02-05 39 views
7

在R,当我试图通过ifelse分配的功能,我得到以下错误:为什么我不能在R中分配一个带有ifelse的函数?

> my.func <- ifelse(cond, sqrt, identity) 
Error in rep(yes, length.out = length(ans)) : 
    attempt to replicate an object of type 'builtin' 

如果condFALSE,错误看起来相当的,R抱怨的

attempt to replicate an object of type 'closure' 

什么我可以做两个函数中的一个赋值给一个变量以及这里发生了什么?

+0

对此问题予以启发,是关系到[这个问题](http://stackoverflow.com/questions/17685502 )。 – quazgar

回答

5

因为ifelse是向量化的,并且没有为非向量化条件提供特殊情况,所以参数被复制为rep(...)rep(...)失败的关闭,如在例子中,但。

一种解决方法是temprarily包裹功能:

my.func <- ifelse(cond, c(sqrt), c(identity))[[1]] 
+1

我会去与'之开关 - 有在如何使用'之开关抓住不同的功能,并将其应用到输入很多教程例子。 –

+9

...或者只是使用'my.func < - if(cond)sqrt else identity'。无需滥用'ifelse'。 –

1

@Joshua Ulrich的评论是正确的答案。完成条件函数分配正确的方法是经典if...else,而不是矢量ifelse方法:

my.func <- if (cond) sqrt else identity 
相关问题