#r #arrays #list
#r #массивы #Список
Вопрос:
У меня есть такой массив, как этот:
arr1<-array(1:5,dim=c(3,4,2))
И два списка, подобные этим:
li1<-list(1,2)
li2<-list(list(c(2,3)),list(c(1,2)))
#длина (li1)==длина (li2)
Я хочу проверить в первой (в соответствии с первым элементом li1) матрице массива, могу ли я найти ‘1’ в строках 2 и 3 (в соответствии с первым элементом li2). Я также хочу проверить во второй матрице массива (в соответствии со вторым элементом li1), могу ли я найти ‘1’ в строках 1 и 2 (в соответствии со вторым элементом li2). И так далее (если бы у меня было больше элементов в li1 и li2). Позиция элемента ‘1’ должна быть соответствующим столбцом, если элемент может быть найден. Я могу (почти) сделать это индивидуально для каждого элемента списков.
f1 <- function(x) {which(arr1[x, , li1[[1]]] == 1)}
result <- lapply(li2[[1]], f1)
Но я хотел бы сделать то же самое с n элементами li1 и li2, используя функцию ‘apply ()’. Я борюсь с этим и пробую разные комбинации «применить».
Результат должен быть примерно таким:
> result
[[1]]
[1] 4 2
[[2]]
[1] 2 0
Комментарии:
1. ОК. Возможно, первый список не нужен. Я хотел бы проверить первый элемент li2 в первой матрице массива, второй элемент li2 во второй матрице массива, … и так далее, таким же образом, как указано выше, т. Е. В каких позициях (столбцах) я могу найти определенный элемент (скажем, ‘1’) в строках, обозначенных элементом li2.
2. Вопрос слишком сложный, слишком глупый или слишком специфичный?
Ответ №1:
Это мое собственное сложное, примитивное и неотшлифованное решение:
df1<-t(data.frame(li2))
f1 <- function(x,y) {which(arr1[x, ,y] == 1)}
for (i in 1:2){
print(mapply(f1,df1[i,],i))
}