if ... else是否适用于数组和矩阵?

时间:2012-08-20 10:47:47

标签: r

aa <- seq(1, 10, 1)
bb <- a * runif(n = 10, min = 0, max = 2) * 1000
cc <- cbind(aa, bb)

dd <- ifelse(aa / bb - 1 > .1, cc, cc * 10)

我该如何ifelse返回cc之类的矩阵而不是列数组?

我尝试了ifelse

aa <- seq(1, 10, 1)
bb <- a * runif(n = 10, min = 0, max = 2) * 1000
cc <- cbind(aa, bb)

if(aa / bb - 1 > .1) {
    cc
}
else {
    cc * 10
}

两个问题:第一个问题是它只使用第一个元素,但我想我可以使用for()周期来解决它;第二个是它返回

Error: unexpected 'else' in "else"

谢谢,

2 个答案:

答案 0 :(得分:0)

函数ifelse()同样乐于接受向量和矩阵。稍微调整您的示例:

ifelse(cc > 1000, -cc, cc * 10)
       aa          bb
 [1,]  10   2006.2160
 [2,]  20  -3636.6234
 [3,]  30    455.8483
 [4,]  40  -4939.6886
 [5,]  50  -3519.1552
 [6,]  60  -1359.0747
 [7,]  70  -2267.0220
 [8,]  80  -9232.1221
 [9,]  90  -5942.5760
[10,] 100 -19439.4255

这样做的原因是数组和矩阵实际上是带有一些额外属性的向量,这些属性定义了数字或行和列。

关于ifelse的观点是您的输入和输出应该具有相同数量的元素。

答案 1 :(得分:0)

如果尝试这样的话:

sel <- aa / bb - 1 > .1
cc[sel, ] <- 10 * cc[sel,]