ifelse()在R中出现意外结果

时间:2015-10-14 17:04:36

标签: r if-statement

我的数据框中有几个分档。

[1] "bin1" "bin2" "bin3" "bin4" "bin5" "bin6"

我有一个bin号码,并希望排除除bin和前一个bin之外的所有内容。如果bin = 1,我只想排除除bin1之外的所有内容(bin0不存在)。 为了生成一个二进制名称向量,以便稍后从我的数据框中排除,我生成:

BinsToDelete <- ifelse(i>1, paste("bin",1:6,sep="")[-((i-1):i)],paste("bin",1:6,sep="")[-i])

为了便于理解

> i=3
> paste("bin",1:6,sep="")[-((i-1):i)]
[1] "bin1" "bin4" "bin5" "bin6"
> paste("bin",1:6,sep="")[-i]
[1] "bin1" "bin2" "bin4" "bin5" "bin6"

奇怪的是,ifelse语句产生了这个:

> i=3
> BinsToDelete <- ifelse(i==1, paste("bin",1:6,sep="")[-i],paste("bin",1:6,sep="")[-((i-1):i)])
> BinsToDelete
[1] "bin1"

那里发生了什么?

正常的if-else语句给出了所需的结果:

> if(i==1){
  BinsToDelete <- paste("bin",1:6,sep="")[-i]
} else { BinsToDelete <- paste("bin",1:6,sep="")[-((i-1):i)]}
> BinsToDelete
[1] "bin1" "bin4" "bin5" "bin6"

感谢您帮助我了解ifelse如何得出这个结论。

2 个答案:

答案 0 :(得分:2)

来自?ifelse

Value:

     A vector of the same length and attributes (including dimensions
     and ‘"class"’) as ‘test’ and data values from the values of ‘yes’
     or ‘no’.

在你的情况下:

> i <- 3
> length(i)
[1] 1

所以你有一个长度为1的输出

答案 1 :(得分:0)

我通常会尽可能避免使用var loggedUserPromise = $http.get('http://www.mybackend.com/login').then(function (response) {...,因为我认为生成的代码在美学上是令人不愉快的。它删除类属性并使处理因子和日期以及数据时间变得困难的事实是避免它的另一个原因。

ifelse