所以我试图创建一个if语句,如果列数大于1,那么它将对该矩阵进行几种形式的操作,如果矩阵的列数少于或等于1,则不会执行分析。这是一些代码:
M < - NxN矩阵
if (ncol(M) > 1) {
function1
function2
function3
...
}
else {}
然而,当我这样做时,我不断收到以下错误:
Error in if (ncol(M) > 1) { : argument is of length zero
答案 0 :(得分:2)
您的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"
将来,当您遇到类似这样的问题时,请尝试str
和class
函数:它们将向您显示任何对象的结构和类。