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))

2つのリストL(ベクトルのリスト)とInputList(データフレームのリストのリスト)があります。リストL内のベクトル(1,1)の位置を検索し、InputListからデータフレームの対応するリストを返す必要があります

たとえば、上記の例では、ベクトル(1,1)はInputlistの3番目の要素であるため、Lからデータフレームの3番目のリストを返す必要があります。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ます。

> 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 に答える