我知道此前已被问到一堆,但我无法弄清楚我发现了什么。我想在R中创建一个固定长度的双精度数组数组,这是正确的声明吗?我认为希望能够将元素推送到这些数组中,例如array[1][]=0.1
,array[2][]=0.2
等。
答案 0 :(得分:0)
一种方法是:
list_a<-vector("list",number_of_vectors)
然后使用
list_a[[i]]<-c(list_a[[i]],num_to_push_back);
i
等。
你可以在列表中增长向量 - 但是在R
...
然后你可以为你的阵列做list_a[[a]][b]
。但语法很悲惨,我敢打赌,在异丙酚上表现会比杰克逊慢。
另一个,更多&#34; R-idiomatic&#34;避免使用参差不齐的数组的方法可能是预先分配(或创建/不管)尺寸大于最大矢量长度的矩阵。较短的向量的缺失值可以填充NA
- R中的许多/大多数功能旨在应对NA
。或者在使用向量时简单地使用函数na.omit
。例如
Not_a_ragged_array=matrix(NA,10,10) #a 10 by 10 matrix filled with NAs
#fill each column with a vector of random numbers, of random length
num_rows=sample.int(9,10,replace=TRUE); for(i in 1:10){Not_a_ragged_array[1:num_rows[i],i]=rbinom(num_rows[i],10,0.8)}
Not_a_ragged_array
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 8 9 7 8 7 10 8 7 9 9
# [2,] 8 10 NA 6 8 9 8 NA 8 6
# [3,] 7 7 NA 10 7 9 9 NA 9 9
# [4,] NA 9 NA 6 10 7 NA NA 6 9
# [5,] NA 5 NA 9 7 6 NA NA NA 9
# [6,] NA 8 NA 9 9 NA NA NA NA 8
# [7,] NA NA NA 9 NA NA NA NA NA 9
# [8,] NA NA NA 8 NA NA NA NA NA 8
# [9,] NA NA NA NA NA NA NA NA NA NA
#[10,] NA NA NA NA NA NA NA NA NA NA
as.vector(na.omit(Not_a_ragged_array[,1])) #get individual vectors like this
#[1] 8 8 7