2014-02-05 35 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 
相關問題