Поиск позиций элементов в массиве с использованием двух списков

#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))
}