Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:循环列表列表以检索包含命中的子列表的标题_R_List_Loops_Vector_Sublist - Fatal编程技术网

R:循环列表列表以检索包含命中的子列表的标题

R:循环列表列表以检索包含命中的子列表的标题,r,list,loops,vector,sublist,R,List,Loops,Vector,Sublist,我在R中有一个列表。列表列表中的每个子列表都包含多个元素。这些子列表不一定都具有相同的长度。所有子列表都有一个特定的标题名。像这样: #create list of lists vector1 = c("apple","banana","cherry") vector2 = c("banana","date","fig") vector3 = c("fig"

我在R中有一个列表。列表列表中的每个子列表都包含多个元素。这些子列表不一定都具有相同的长度。所有子列表都有一个特定的标题名。像这样:

#create list of lists
vector1 = c("apple","banana","cherry")
vector2 = c("banana","date","fig")
vector3 = c("fig","jackfruit","mango","plum")
listoflists  = list(vector1 , vector2, vector3)
names(listoflists) = c("listA", "listB", "listC")
wanted = c("apple","banana","fig")
wanted
[1] "apple"  "banana" "fig" 
列表列表如下所示:

listoflists

$listA
[1] "apple"  "banana" "cherry"

$listB
[1] "banana" "date"   "fig"   

$listC
[1] "fig"       "jackfruit" "mango"     "plum"     
#desired output
apple  listA
banana listA listB
fig    listB listC
output_list = list()
for (i in wanted){
  output = EXTRACT LIST HEADER WHEN i IS PRESENT IN SUBLIST
  output_list[[i]] = output
}
接下来,我有一个向量,它包含也可以在子列表中找到的元素。像这样:

#create list of lists
vector1 = c("apple","banana","cherry")
vector2 = c("banana","date","fig")
vector3 = c("fig","jackfruit","mango","plum")
listoflists  = list(vector1 , vector2, vector3)
names(listoflists) = c("listA", "listB", "listC")
wanted = c("apple","banana","fig")
wanted
[1] "apple"  "banana" "fig" 
对于所需向量中的每个元素,我希望提取包含该特定元素的列表中每个子列表的标题名称。对于这里的示例,输出应该如下所示:

listoflists

$listA
[1] "apple"  "banana" "cherry"

$listB
[1] "banana" "date"   "fig"   

$listC
[1] "fig"       "jackfruit" "mango"     "plum"     
#desired output
apple  listA
banana listA listB
fig    listB listC
output_list = list()
for (i in wanted){
  output = EXTRACT LIST HEADER WHEN i IS PRESENT IN SUBLIST
  output_list[[i]] = output
}
我考虑将其放入for循环,以获得如下内容:

listoflists

$listA
[1] "apple"  "banana" "cherry"

$listB
[1] "banana" "date"   "fig"   

$listC
[1] "fig"       "jackfruit" "mango"     "plum"     
#desired output
apple  listA
banana listA listB
fig    listB listC
output_list = list()
for (i in wanted){
  output = EXTRACT LIST HEADER WHEN i IS PRESENT IN SUBLIST
  output_list[[i]] = output
}
但是,不清楚我是否可以,如果可以,如何循环列表列表,以仅提取包含所需向量中元素的子列表的标题名。我研究了使用
unlist
函数,但对于这个问题似乎没有什么用处。我查看了stackoverflow以及其他论坛,但没有发现任何概述类似问题的问题。因此,如果有人能为我指出解决这个问题的正确方向,那将是非常有帮助的


已经谢谢你了

获取输出有多种方法

1)一个选项是循环“列表”,根据“想要的”值将
向量子集,
堆栈
将其放入一个两列
数据框
,然后再通过“值”将
拆分成一个
列表

with(stack(lapply(listoflists, function(x) 
     x[x %in% wanted])), split(as.character(ind), values))
#$apple
#[1] "listA"

#$banana
#[1] "listA" "listB"

#$fig
#[1] "listB" "listC"

2)或者我们可以
先将
堆叠到两列的“data.frame”,然后
子集
行,然后
拆分

with(subset(stack(listoflists), values %in% wanted), 
           split(as.character(ind), values))
#$apple
#[1] "listA"

#$banana
#[1] "listA" "listB"

#$fig
#[1] "listB" "listC"

3))或者另一个选项是循环“通缉犯”并根据匹配获得“列表列表”的
名称

setNames(lapply(wanted, function(x) 
   names(which(sapply(listoflists, function(y) x %in% y)))), wanted)
#$apple
#[1] "listA"

#$banana
#[1] "listA" "listB"

#$fig
#[1] "listB" "listC"

这是另一个基本的R选项

u <- unlist(listoflists)
sapply(wanted, function(x) rep(names(listoflists),lengths(listoflists))[u %in% x])

您可以使用
stack
+
unstack

unstack(subset(stack(listoflists), values%in%wanted), ind~values)

$apple
[1] "listA"

$banana
[1] "listA" "listB"

$fig
[1] "listB" "listC"