2

与えられた行列

test <- structure(list(X1 = c(3L, 0L, 3L, 1L, 2L, 2L, 1L, 2L, 2L, 3L), 
X2 = c(2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), X3 = c(0L, 
0L, 3L, 0L, 2L, 2L, 3L, 0L, 0L, 2L), X4 = c(1L, 1L, 1L, 0L, 
3L, 1L, 3L, 1L, 1L, 1L), X5 = c(3L, 3L, 1L, 3L, 1L, 3L, 2L, 
3L, 3L, 3L), X6 = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L
), X7 = c(2L, 2L, 2L, 3L, 2L, 2L, 3L, 2L, 2L, 2L), X8 = c(3L, 
0L, 1L, 0L, 1L, 1L, 3L, 0L, 0L, 1L), X9 = c(3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L)), .Names = c("X1", "X2", "X3", "X4", 
"X5", "X6", "X7", "X8", "X9"), row.names = c("1", "2", "3", "4", 
"5", "6", "7", "8", "9", "10"), class = "data.frame")

「1」の各インスタンスをc(0,0,1)、2をc(0,1,0)、3を(1,0,1)、0を一連の数字に置き換えようとしています。 (0,0,0)。マトリックス内の各値は、3つのバイナリ値のこれらのシーケンスの1つに置き換える必要があります。nrow結果の行列のは。になりますnrow(test) * 3。明らかに私はインデックスを使おうとしましtest[test == 1] <- c(0,0,1)たが、これはエラーを返しますrhs is the wrong length for indexing by a logical matrix。置換関数もここでは機能していないようで、同じエラーメッセージが返されます。何か案が?

4

4 に答える 4

5

結果の次元が異なるため (2 次元行列ではなく 3 次元配列)、要素を 1 つずつ置き換えることはできません。

: if は、行列の各列または行に関数を適用するためによく使用されますapplyが、各要素に関数を適用するためにも使用できます。

apply( 
  test, 
  1:2, 
  function(u) list(c(0,0,0), c(0,0,1), c(0,1,0), c(1,0,1))[[u+1]] 
)
于 2012-05-29T00:43:29.110 に答える