2014-12-06 65 views
0

我知道这已被问到一堆,但我有麻烦理解我发现的东西。我正在寻找在R中创建一个固定长度的双精度数组数组,对于这个数据什么是正确的声明?我觉得希望能够推动元素融入到这些阵列,像array[1][]=0.1array[2][]=0.2R空阵列的固定长度阵列

+1

这与N列的两行矩阵有何不同?定义一个长度为N的列表并用两个元素向量填充它也很容易。 – 2014-12-06 23:03:31

+0

我在循环内推动元素,所以它最终会成为N个不同长度的数组。 – 2014-12-06 23:28:58

+0

然后它只是一个列表。并发症在哪里? – 2014-12-07 00:01:17

回答

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]。但语法是悲剧性的,我敢打赌,在丙泊酚上的表现会比杰克逊慢。

另一种避免使用不规则数组的“R-idiomatic”方法可能是预先分配(或创建/不管)尺寸大于最大向量长度的矩阵。较短向量的缺失值可以用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 
+0

这是我一直在寻找的功能。不太熟悉R数据类型和性能 - 是否有一个更明智的方法来完成这一点? – 2014-12-08 00:18:50

+0

这没关系。一般人在不熟悉答案的时候会提出问题......所以它的预期。我认为这是R中唯一的(其他方法是这种变体的)方式来创建你正在寻找的对象(不规则数组)。你可以在这里找到相同主题的变体:http://www.r-bloggers.com/efficient-ragged-arrays-in-r-and-rcpp/。要确定你的*实际*问题是否真的需要使用不规则数组,你需要更多地了解你的问题。我已经编辑了一个更加“R习惯”的建议,以避免参差不齐的数组。 – 2014-12-08 10:20:05