Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.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_Functional Programming_Dplyr_Named - Fatal编程技术网

查找命名列表中的值以替换R中另一个命名列表中的值

查找命名列表中的值以替换R中另一个命名列表中的值,r,list,functional-programming,dplyr,named,R,List,Functional Programming,Dplyr,Named,我有一份调查的编码答案列表,以及一份抄本,该抄本包含了对所述调查中某个特定问题的每个可能的编码答案,并存储了实际答案。数据被设置为一个列表,该列表是为上下文构建的: mylist=list(a=list(AA="Yes",AB="No",AC="Maybe"),b=list(BA="Yes",BB="No",BC="Maybe")) myanswers<-list(a="AA",b="BC") 但是我想 myanswers $a [1] "Yes" $b [1] "Maybe" 我尝

我有一份调查的编码答案列表,以及一份抄本,该抄本包含了对所述调查中某个特定问题的每个可能的编码答案,并存储了实际答案。数据被设置为一个列表,该列表是为上下文构建的:

mylist=list(a=list(AA="Yes",AB="No",AC="Maybe"),b=list(BA="Yes",BB="No",BC="Maybe"))
myanswers<-list(a="AA",b="BC")
但是我想

myanswers
$a
[1] "Yes"

$b
[1] "Maybe"

我尝试过使用不同的lappy方法,但都没能让它们发挥作用。此外,索引并不总是对齐的,因此尝试for循环也没有获得最佳结果。

如果列表的顺序相同,可以使用base R和
mapply
函数来实现这一点

mapply(function(a,b) a[b], mylist, myanswers)
当然,如果不是这样的话,您可以
映射这些名称

Map(function(x) {
    mylist[[x]][[myanswers[[x]]]]
}, names(myanswers))

第一次创建查找表的另一个选项

(lookup <- do.call(rbind, lapply(mylist, stack)))
#    values ind
#a.1    Yes  AA
#a.2     No  AB
#a.3  Maybe  AC
#b.1    Yes  BA
#b.2     No  BB
#b.3  Maybe  BC

这是可行的,但“myanswers”中的某些元素不在“mylist”中,因此程序会中断并说下标超出范围。在这种情况下,您希望有什么行为?当可再现的示例捕获了您希望处理的不同案例时,更容易提供帮助。
(lookup <- do.call(rbind, lapply(mylist, stack)))
#    values ind
#a.1    Yes  AA
#a.2     No  AB
#a.3  Maybe  AC
#b.1    Yes  BA
#b.2     No  BB
#b.3  Maybe  BC
lapply(myanswers, function(x) lookup$values[match(x, lookup$ind)])
#$a
#[1] "Yes"
#
#$b
#[1] "Maybe"