【发布时间】:2021-03-13 10:03:13
【问题描述】:
我有一个这样的数组:
arr1<-array(1:5,dim=c(3,4,2))
还有两个这样的列表:
li1<-list(1,2)
li2<-list(list(c(2,3)),list(c(1,2)))
#length(li1)==长度(li2)
我想检查数组的第一个(根据 li1 的第一个元素)矩阵是否可以在第 2 行和第 3 行中找到“1”(根据 li2 的第一个元素)。我还想检查数组的第二个矩阵(根据 li1 的第二个元素)是否可以在第 1 行和第 2 行中找到“1”(根据 li2 的第二个元素)。依此类推(如果我在 li1 和 li2 中有更多元素)。如果可以找到该元素,则元素“1”的位置应该是对应的列。 我可以(几乎)为列表的每个元素单独执行此操作。
f1 <- function(x) {which(arr1[x, , li1[[1]]] == 1)}
result <- lapply(li2[[1]], f1)
但我想对 li1 和 li2 的 n 个元素做同样的事情,使用“apply()”函数。我正在努力解决这个问题并尝试不同的“应用”组合。
结果应该是这样的:
> result
[[1]]
[1] 4 2
[[2]]
[1] 2 0
【问题讨论】:
-
好的。也许第一个列表不是必需的。我想在数组的第一个矩阵中检查li2的第一个元素,在数组的第二个矩阵中检查li2的第二个元素,...依此类推,方法同上,即在哪个位置(列)我可以在 li2 的元素指示的行中找到某个项目(比如“1”)吗?
-
这个问题是不是太难了、太笨了还是太具体了?