2015-07-28 2 views
0

У меня есть матрица, которая имеет только один столбец, элементы которого не являются полностью 0.R: Ncol возвращает NULL, даже если объект является матрицей

Я использую следующий код, чтобы получить число ненулевых столбцов в матрице:

ncol(matrix[, colSums(matrix) != 0]) 

Этот код возвращает правильный номер, когда матрица имеет более чем 1 ненулевого столбец, но когда матрица имеет ровно 1 ненулевого столбец, этот код возвращает NULL.

Я попытался с помощью этого кода, и это, кажется, работает нормально:

length(which(colSums(matrix) != 0)) 

Что может быть проблема?

ответ

3

Вам необходимо установить drop = FALSE, иначе [ уменьшит его результат до вектора, если есть только один столбец.

ncol(matrix[, colSums(matrix) != 0, drop = FALSE]) 

Или просто использовать NCOL, на долю которого приходится такой возможности.

NCOL(matrix[, colSums(matrix) != 0]) 
Смежные вопросы