返回列表的名称,其中vector和list的元素相等

时间:2017-04-12 10:35:05

标签: r

我有列表列表,每个内部列表都包含一个或多个向量:

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,则返回带有列表名称的向量,它存在于哪里。

我的尝试并不成功:

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 - '78 .78'的第二元素的信息在哪里? 一般来说,我的目的是返回列表的名称,其中vector和list的元素相等,如下所示:

     d
1    traincodes2
2    Na

2 个答案:

答案 0 :(得分: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" 

答案 1 :(得分: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*"