我正在将Cell数组转换为R. 在MATLAB中我使用x = cell(10,n)。我希望并为循环中的每个单元分配一个矩阵,如:
for i in 1:10
for j in 1:n
x(i,j) = [i*ones(len,1), ones(len,j)]
这里就像列数一样。 我如何在R中执行此操作? 我在R中尝试了List,我猜这个x看起来像包含10个列表,每个列表有n个子列表,每个子列表都有一个矩阵。这是对的吗?
图中显示了在Matlab中生成的第一个循环.n = 7。第一行在每个单元格中包含一个数字矩阵。 我想得到的是能够通过使用
获得第一个矩阵“3x10 double”x[1][1] in R
Refence how to calculate the mean of list of list of matrices in r
答案:根据上面的链接代码是这样的:
x<-NULL
for (i in 1:10){
test<-NULL
for (j in 1:n){
test[[j]]<-matrix
}
x[[i]]<-test
}
答案 0 :(得分:0)
x<-NULL
for (i in 1:10){
test<-NULL
for (j in 1:n){
test[[j]]<-matrix
}
x[[i]]<-test
}
答案 1 :(得分:0)
首先,指定输出中的行数和列数,并定义一个函数,该函数返回输出矩阵中每个元素的内容。
n_rows <- 5
n_cols <- 7
get_element <- function(i, j)
{
len <- 10
cbind(rep.int(i, len), matrix(1, len, j))
}
我们需要将所有行和列值的所有组合传递给函数。
index <- arrayInd(seq_len(n_rows * n_cols), c(n_rows, n_cols))
现在我们用每个行/列对调用get_element。
result <- mapply(get_element, index[, 1], index[, 2])
result
是一个列表。这意味着它是一个向量,其中每个元素可以包含不同的值。要获得所需内容,您可以设置此列表的尺寸。
dim(result) <- c(n_rows, n_cols)
result
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] Numeric,20 Numeric,30 Numeric,40 Numeric,50 Numeric,60 Numeric,70 Numeric,80
## [2,] Numeric,20 Numeric,30 Numeric,40 Numeric,50 Numeric,60 Numeric,70 Numeric,80
## [3,] Numeric,20 Numeric,30 Numeric,40 Numeric,50 Numeric,60 Numeric,70 Numeric,80
## [4,] Numeric,20 Numeric,30 Numeric,40 Numeric,50 Numeric,60 Numeric,70 Numeric,80
## [5,] Numeric,20 Numeric,30 Numeric,40 Numeric,50 Numeric,60 Numeric,70 Numeric,80
可以使用result[[3, 5]]
访问单个矩阵。
result[[3, 5]]
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 3 1 1 1 1 1
## [2,] 3 1 1 1 1 1
## [3,] 3 1 1 1 1 1
## [4,] 3 1 1 1 1 1
## [5,] 3 1 1 1 1 1
## [6,] 3 1 1 1 1 1
## [7,] 3 1 1 1 1 1
## [8,] 3 1 1 1 1 1
## [9,] 3 1 1 1 1 1
## [10,] 3 1 1 1 1 1
请注意,虽然具有维度的列表与MATLAB单元阵列最接近,但它是一种很少使用的数据结构。这意味着你不会用这样的结构编写惯用的R代码。 (从MATLAB编码到R编码,你必须做的最大的心理转变之一是从矩阵的思考到向量的思考。)
在这种情况下,显而易见的问题是&#34;为什么需要存储所有这些矩阵?&#34;。可以更轻松地调用get_element
并根据需要检索值。