0
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 返回相应的数据帧列表

例如在上面的示例中,向量 (1,1) 是 Inputlist 的第三个元素,所以我必须从 L 返回第三个数据帧列表是 List (B,C,A)

4

2 回答 2

2

我假设您有一种定义测试向量的方法。在您的示例中,您使用了c(1, 1).

test_vector <- c(1, 1)

定义一个执行您想要的功能。如果 InputList 中的值与您的相同,则返回与索引匹配的test_vector元素。Lx

myfun <- function(x, test_vec=test_vector) {
  if(identical(InputList[[x]], test_vec)) {
    return(L[[x]])
  }
}

out <- lapply(seq_along(InputList), myfun)

但是,这NULL会在不匹配的地方返回。下面的步骤删除NULL列表中的 s。

> 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
于 2012-06-14T17:08:05.997 回答
0
test<-mapply(function(x,y){paste(x,collapse="~")==y},InputList,paste(c(1,1),collapse="~"))
L[test]
于 2012-06-14T17:08:29.803 回答