在R中使用哪个函数的ifelse行为

时间:2014-10-03 17:36:57

标签: r if-statement which



刚刚玩了一些基本函数,如果我在ifelse条件为真时使用which()函数作为参数之一,ifelse的行为似乎很奇怪,例如:

#I want to identify the location of all values above 6.5 
#only if there are more than 90 values in the vector a:

set.seed(100)
a <- rnorm(100, mean=5, sd=1)
ifelse(length(a)>90, which(a>6.5), NA)

我得到了这个输出:

[1] 4

实际上它应该是以下内容:

[1]  4 15 25 40 44 47 65

如何使用if()函数使ifelse返回正确的值?
它似乎只输出匹配条件的第一个值。为什么这样做?
我很感激你的回答。谢谢。

1 个答案:

答案 0 :(得分:3)

在这种情况下,您实际上不想使用ifelse。正如BondedDust指出的那样,您应该将ifelse视为一个函数,该函数接受三个向量,并根据第一个中的TRUE / FALSE值从后两个中选择值。或者,正如文档所说:

  

ifelse返回一个与填充的test相同形状的值   选择是或否的元素取决于是否   测试元素为TRUE或FALSE。

您可能只是想使用常规的if语句。

ifelse的一个潜在混淆是 回收参数。具体来说,如果我们这样做

ifelse(rnorm(10) < 0,-1,1)

你会注意到第一个参数是长度为10的逻辑向量,但是我们的第二个“向量”都是长度为1。 R将根据需要简单地扩展它们以匹配第一个参数的长度。即使长度不能均匀扩展到正确的长度,也会发生这种情况。