-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

試し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()2 つの問題: 1 つ目は、最初の要素のみを使用することですが、サイクルを使用して解決できると思います。2つ目は、それが返されることです

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 に答える