【问题标题】:Search positions of elements in array using two lists使用两个列表搜索数组中元素的位置
【发布时间】: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”)吗?
  • 这个问题是不是太难了、太笨了还是太具体了?

标签: r arrays list


【解决方案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))
}

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    相关资源
    最近更新 更多