2017-04-12 82 views
1

我有列表的列表,每个内部列表中的含有一种或多种载体:返回名称其中矢量和列表的元素相等

codes <- list(
'traincodes' = list(c('2.29*', '99.49'), c('78.78')), 
'traincodes2' = list(c('02.24*'))) 

我想要查询向量d中的每个元素:

d = c('02.24*', '78.78') 

是否列出“traincodes”和“traincodes2”包含矢量d的元件的每个第一元件。如果它与列表,它存在的名字返回true载体。

我尝试没有sucsessfull:

for (i in seq_along(codes)) 
{for (k in seq_along(codes[[i]])) 
    {l = sapply(codes[[i]][[1]][[k]], function(x) d == x)}} 

至极返回不是我想要的

 02.24* 
1 TRUE 
2 FALSE 

但是,在大约d的第二的Elemen一个信息 - 78年0.78' ? 一般来说我的目的是返回列表,向量和列表的元素相等,东西的名字是这样的:

 d 
1 traincodes2 
2 Na 

回答

2

你可以试试。(我改变了代码的名称以使其更易于区分

codes <- list(
'traincodes1' = list(c('2.29*', '99.49'), c('78.78')), 
'traincodes2' = list(c('02.24*'))) 
d = c('02.24*', '78.78') 

unlist(codes)[match(d,unlist(codes,use.names = F))] 
traincodes2 traincodes13 
    "02.24*"  "78.78" 
+0

感谢,但我们能够避免加入!位置在结果的名字对我们来说只是:traincodes2 traincodes1(不traincodes13)? – Shin

1

这是你想要的吗?

# Your codes. 
    codes <- list(
     traincodes = list(c('2.29*', '99.49'), c('78.78')), 
     traincodes2 = list(c('02.24*'))) 

    # Target. 
    d = c('02.24*', '78.78') 

    # Check where in your code a element of d is found, then extract that element from code and return it. 
enter code here 
    #If you want just the position remove the code[[ ]] 
    lapply(codes, function(code) { 
     code[[which(d %in% code)]] 
    }) 

返回:

$traincodes 
[1] "78.78" 

$traincodes2 
[1] "02.24*"