1. ホーム
  2. r

[解決済み】R 置換する項目数が置換長の倍数でない/しかし結果は正しい

2022-02-12 12:57:17

質問

この件に関するスレッドが既にあることは知っていますが、それらを見ても何が問題なのか分かりませんでした - その点はご容赦ください。

コードを実行しようとしているところです

  for (i in 1:a){
    matrix$new_column[i]<-which(matrix[i,1:b-1]==matrix$col_b[i])
  }

私が試みているのは に対して マトリックス a 行と b の列で、各行の列で 2 から b-1 の列と同じ値を含むものを探します。 b (そのような値は必ずあります) そして、その列番号を *new_column* に書き込んでください。

私のコードでは、エラーが発生します。

matrix$new_column[i] における警告 <- which(matrix[i, : 数) 置換する項目が置換長の倍数でない場合

しかし、結果は完全に正しいです。試してみたところ

  • 0で埋め尽くされた*new_column*を最初に作成します。
  • から終了インデックスを変更 a から a-1 または a+1

このように、結果は正しいのですが、すべて正しく行ったのであれば、警告メッセージは表示されないはずだと感じています。

最後に、なぜ2からb-1にしたいのに1:b-1を選んだのかは聞かないでください。2:b-1を使うとき、実際には3列目から始まることがわかったからです。

どのように解決するのですか?

which() は、複数のマッチがある場合にベクトルを返すことができます。 例えば

which((1:12)%%2 == 0) # which are even?

matrix$col_b[i] は一意ですか?結果はまだ正しく見えるかもしれません。 この場合、何が起こるかに注目してください。

x <- 1:2
x[1] <- 3:4
x

また 1:b-1 からの数値は与えられません。 1 から b - 1 からの数値が 1 から b は、すべてマイナス 1 :

b <- 10
1:b-1

最初に強制的に引き算をするために、括弧が必要なのです。 1:(b - 1) .