-1
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而不是列数组?

我试过if并且else喜欢

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"

谢谢,

4

2 回答 2

0

如果会尝试这样的事情:

sel <- aa / bb - 1 > .1
cc[sel, ] <- 10 * cc[sel,]
于 2012-08-20T12:29:48.313 回答
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是您的输入和输出应该具有相同数量的元素。

于 2012-08-20T11:09:25.967 回答