操作列表和数据框列表

时间:2012-06-14 16:42:54

标签: r

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)

2 个答案:

答案 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]