A = data.frame( a = c(1:10), b = c(11:20) )
B = data.frame( a = c(101:110), b = c(111:120) )
C = data.frame( a = c(5:8), b = c(55:58) )
L = list( list(B), list(A,C), list(B,C,A), list(B,C) )
InputList = InputList = list(c(0.9,0.8),c(0.98,0.5),c(1, 1),c(1.5,1.2))
我有两个列表L(向量列表)和InputList(数据帧列表)。我必须在列表L中搜索向量(1,1)的位置,并从InputList返回相应的数据帧列表
例如在上面的例子中,vector(1,1)是Inputlist的第三个元素,所以我必须从L返回第三个数据帧列表List(B,C,A)
答案 0 :(得分:2)
我假设您有一种定义测试向量的方法。在您的示例中,您使用了c(1, 1)
。
test_vector <- c(1, 1)
定义一个能够达到你想要的功能。如果InputList中的值与您的test_vector
相同,则返回与L
匹配的x
元素。
myfun <- function(x, test_vec=test_vector) {
if(identical(InputList[[x]], test_vec)) {
return(L[[x]])
}
}
out <- lapply(seq_along(InputList), myfun)
然而,如果不匹配,则返回NULL
。以下步骤将删除列表中的NULL
。
> out[!sapply(out, is.null)]
[[1]]
[[1]][[1]]
a b
1 101 111
2 102 112
3 103 113
4 104 114
5 105 115
6 106 116
7 107 117
8 108 118
9 109 119
10 110 120
[[1]][[2]]
a b
1 5 55
2 6 56
3 7 57
4 8 58
[[1]][[3]]
a b
1 1 11
2 2 12
3 3 13
4 4 14
5 5 15
6 6 16
7 7 17
8 8 18
9 9 19
10 10 20
答案 1 :(得分:0)
test<-mapply(function(x,y){paste(x,collapse="~")==y},InputList,paste(c(1,1),collapse="~"))
L[test]