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"
谢谢,
答案 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,]