R ifelse()失败而if(){} else {}具有相同的参数

时间:2015-06-08 16:00:14

标签: r if-statement vectorization

我使用R,310(64位) 我试图创建一个预定长度的矢量(201),用作空图集的y轴范围,稍后填写。

我想为此向量设置最小最大值(5 000 000)以保持一个有点统一的图,同时处理不同的,有时更高的最大条目。

一个简单的if-else语句应该这样做(参见示例代码)。但是,我碰到了一些奇怪的东西,对于我的生活,我无法解释。使用vectorized ifelse()命令时,与标准的if-else命令结构相比,我得到了一个完全不同且非常错误的答案。我尝试在括号中设置个人和所有元素,例如ifelse((条件),(真),(假)),但无济于事。

这对我想要做的事情并不重要,但我真的很想知道这里发生了什么,因为我确信我会在某些时候陷入困境。我使用ifelse()命令很重要。

不幸的是,没有任何错误消息可以帮助我进一步理解R对这些命令的处理方式,因此您的答案将会受到赞赏。

提前谢谢 鲁道夫

n.group <- c(2504576,2208945,1500043,90672,57432,345961,239856,138742,73890,23745,9348,5213,300)
y.axis  <- c(100,250,500,1000,2500,5000,10000,50000,100000,500000,1000000,5000000)

y.range <- ifelse(max(n.group) < 5000000, seq(1, max(y.axis), length.out=201), seq(1, max(n.group), length.out=201))

> y.range
 [1] 1       ## why just 1, it should be a vector with length 201?
             ## what goes wrong here?

max(n.group) < 5000000
 [1] TRUE            ## so, the ifelse should lead to a sequence with maximum 5 000 000

seq(1, max(y.axis), length.out=201)
 [1]       1.00   25000.99   50000.99   75000.99  .......
 [201] 5000000.00              ## thus my seq() command works

# what if I devectorize my ifelse?
if(max(n.group)<5000000){
         y.range <- seq(1, max(y.axis), length.out=201)
}else     {
         y.range <- seq(1, max(n.group), length.out=201)}
> y.range
  [1]       1.00   25000.99   50000.99 ........
  [201] 5000000.00            ### now I get the vector of length = 201  ???

0 个答案:

没有答案