【发布时间】:2019-06-19 17:23:35
【问题描述】:
我已将大量数组排列到一个列表中,并且我有一个长度与具有不同值的数组数量相同的向量。对于列表中的每个数组,我想将向量中的连续特定值输入到列表中连续数组中的相同位置。
例如,如果我在一个列表中有 10 个 5x3x10 的数组,并且一个长度为 10 的向量具有 10 个不同的值,我希望向量的第一个值进入位置 [1,1, 1],向量的第二个值进入第二个数组的位置 [1,1,1],向量的第三个值进入第三个数组的位置 [1,1,1],依此类推到进入位置 [1,1,1] 的第十个数组的向量的第十个值。
这是我当前的代码(简化)。 根据需要提供所有变量/数组。 目前我有一个尝试执行此操作的函数,但其编写方式不允许将变量的连续值放入连续数组中。相反,该函数尝试将变量的所有值放入每个数组的位置 [1,1,1] 中,因此返回错误。
#Starting variables
dt = 1
person_id <- c("a", "b", "c", "d", "e")
clinic_id <- c("c1", "c2", "c3")
time_id <- seq(2008.5, 2017.5, by = dt)
first <- c(13,14,10,8,6,8,7,9,10,12)
second <- c(16,8,9,4,5,6,2,3,4,5)
numbers <- data.frame(first,second)
dims <- list(person = person_id,
clinic = clinic_id,
time = time_id)
#Create 10 arrays
for (i in 1:10) {
assign(paste("modarrays", i, sep=""),
array(NA, lengths(dims), dims) )
}
#Creating array list with 10 arrays
modarraysall <- lapply(ls(pattern="modarrays"),get)
arraynames <- sapply(ls(pattern="modarrays"),as.name)
names(modarraysall) <- arraynames
#Initial values in array
initval <- function(x){
x[,,1] <- 0.0
x <- x
}
modarraysallnew <- lapply(modarraysall, initval)
#Values from vector of dataframe into array
#This is where it all goes wrong.
numbersintoarray <- function(x){
x[1,1,1] <- numbers$first
x <- x
}
modarraysallnew <- lapply(modarraysallnew, numbersintoarray)
这个函数实现没有输出,因为我收到一个错误提示
x[1, 1, 1]
我想我知道出了什么问题。此函数希望将 numbers$first 的值放入列表中每个数组的 [1,1,1] 位置。但是,numbers$first 的长度为 10 个值,其中每个数组中的位置 [1,1,1] 只有一个位置。因此,我知道这个函数是错误的。但是我如何编写一个函数,该函数从 numbers$first 中获取每个连续值并将其放入列表中位置 [1,1,1] 的每个连续数组中。
下面我展示了我希望数组之后的样子。
modarrays1[,,1]
clinic
person c1 c2 c3
a 13 0 0
b 0 0 0
c 0 0 0
d 0 0 0
e 0 0 0
modarrays1[,,2]
clinic
person c1 c2 c3
a 14 0 0
b 0 0 0
c 0 0 0
d 0 0 0
e 0 0 0
modarrays1[,,3]
clinic
person c1 c2 c3
a 10 0 0
b 0 0 0
c 0 0 0
d 0 0 0
e 0 0 0
....
modarrays10[,,1]
clinic
person c1 c2 c3
a 12 0 0
b 0 0 0
c 0 0 0
d 0 0 0
e 0 0 0
我意识到我可以一次写出一个数组。但是,在我的实际模型代码中,列表中有 54 个数组,因此希望能够编写一个函数来代替。
【问题讨论】:
-
length(modarraysallnew[[1]][1,1,1])是 1 而length(numbers$first)是 10。这就是它无法分配的原因。您需要并行循环numbers$first和modarraysallnew