我有列表列表,每个内部列表都包含一个或多个向量:
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
答案 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*"