2

したがって、列の数が1より大きい場合、そのマトリックスに対していくつかの形式の操作を行い、マトリックスの列が1以下の場合は分析を行わないifステートメントを作成しようとしています。コードの一部を次に示します。

M <- NxN 行列

 if (ncol(M) > 1) {
      function1
      function2
      function3
      ...
 }
 else {}

ただし、これを行うと、次のエラーが発生し続けます。

 Error in if (ncol(M) > 1) { : argument is of length zero
4

2 に答える 2

4

Mオブジェクトはおそらくマトリックスではありません。行列を作成してコードの出力を確認し、誤ってベクトルに変更した可能性のある方法を調べ、誤ってベクトルになってしまうことなく行列をサブセット化する方法を確認します。

N <- 10
M <- matrix(sample(1:100, N*N, replace=TRUE), N, N)

colTest <- function(M) {
    if (ncol(M) > 1) {
        print("More than one column.")
    } else {
        print("One or fewer columns.")
    }
}
colTest(M)
M.vector <- M[, 2]
colTest(M.vector)
class(M.vector)
M.submatrix <- M[, 2, drop=FALSE]
colTest(M.submatrix)
class(M.submatrix)

出力:

[1] "More than one column."
Error in if (ncol(M) > 1) { : argument is of length zero
[1] "integer"
[1] "One or fewer columns."
[1] "matrix"

将来、このような問題が発生した場合は、strandclass関数を試してみてください。オブジェクトの構造とクラスが表示されます。

于 2013-03-13T18:53:06.330 に答える