Я упорядочил большое количество массивов в списке, и у меня есть вектор, длина которого равна числу массивов с разными значениями. Для каждого массива в списке я хотел бы ввести последовательные конкретные значения в векторе в одну и ту же позицию в последовательных массивах в списке.
Например, если бы в списке было 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] <- числа $ first:
количество заменяемых элементов не кратно длине замены </p>
Я думаю, я знаю, что не так. Эта функция хочет поместить значение чисел $ first в позицию [1,1,1] каждого массива в списке. Однако числа $ first - это длина из 10 значений, где позиция [1,1,1] в каждом массиве - только одна позиция. Поэтому я знаю, что эта функция неправильная. Но как мне написать функцию, которая берет каждое последующее значение из числа $ 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 массива в списке, поэтому я хотел бы иметь возможность написать функцию для этого вместо этого.