Никаких измерений непустого числового вектора в R
У меня проблема с моим числовым вектором и dim()
в R. Я хочу знать размеры моего вектора X с:
dim(X)
Однако эта функция возвращает NULL.
Если я напечатаю:
X
Я вижу, что X не пуст. Почему dim или nrow сообщают об этом как "NULL"?
Part of X:
[93486] 6.343e-01 6.343e-01 6.343e-01 6.343e-01 6.343e-01 6.343e-01 6.346e-01
[93493] 6.346e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01
[93500] 6.347e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01
[93507] 6.347e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01
[93514] 6.347e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01 6.347e-01
[93521] 6.347e-01 6.347e-01 6.347e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01
[93528] 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01
[93535] 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01
[93542] 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01
[93549] 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01 6.348e-01
[93556] 6.348e-01 6.348e-01 6.349e-01 6.349e-01 6.349e-01 6.349e-01 6.349e-01
[93563] 6.349e-01 6.349e-01 6.349e-01 6.349e-01 6.349e-01 6.349e-01 6.349e-01
[93570] 6.349e-01 6.349e-01 6.349e-01 6.349e-01 6.349e-01 6.349e-01 6.349e-01
> dim(X)
NULL
> class(X)
[1] "numeric"
> nrow(pvals_vector)
NULL
Почему нет размеров X?
Ответы
Ответ 1
Потому что это одномерный вектор. Он имеет длину. Размеры - дополнительные атрибуты, применяемые к вектору, чтобы превратить его в матрицу или массив с более высоким размером:
x <- 1:6
dim( x )
#NULL
length( x )
#[1] 6
dim( matrix( x , 2 , 3 ) )
#[1] 2 3
Ответ 2
В качестве примечания я написал функцию, которая возвращает length
если dim==NULL
:
редактировать июнь 2019 года:
Я переписал эту функцию, чтобы она не мешала вызовам base::dim
внутри любых существующих функций.
# return dim() when it sensible and length() elsewise
# let not allow multiple inputs, just like base::dim, base::length
# Interesting fact -- the function "dim" and the function " dim<-" are different
# primitives, so this function here doesn't interfere with the latter.
dim <- function(item) {
if (is.null(base::dim(item)) ) {
dims<-length(item)
} else{
dims <- base::dim(item)
}
return(dims)
}
Ниже приведен исходный код
function(items) {
dims<-vector('list',length(items))
names(dims)<-items
for(thing in seq(1,length(items))) {
if (is.null(dim(get(items[thing])))) {
dims[[thing]]<-length(get(items[thing]))
} else{
#load with dim()
dims[[thing]]<-dim(get(items[thing]))
}
}
return(dims)
}
Или, как указал SimonO, при желании вы можете "форсировать" матрицу 1xN.