R 将列表与do.call组合,同时保留行中列表的每个条目
如果以前有人问过这个问题,请原谅我 我有多个列表,我希望合并如下R 将列表与do.call组合,同时保留行中列表的每个条目,r,list,cbind,do.call,R,List,Cbind,Do.call,如果以前有人问过这个问题,请原谅我 我有多个列表,我希望合并如下 A <- list(c("R", "L", "*", "T", "M", "S", "S", "S", "S", "Y"), c("G", "A", "G", "P", "P", "V", "P"), c("E", "G", "R", "E", "Q", "T", "K", "G", "S", "G"), c("Y", "N", "N", "D", "W"), c("T", "K")) B <
A <- list(c("R", "L", "*", "T", "M", "S", "S", "S", "S", "Y"),
c("G", "A", "G", "P", "P", "V", "P"),
c("E", "G", "R", "E", "Q", "T", "K", "G", "S", "G"),
c("Y", "N", "N", "D", "W"),
c("T", "K"))
B <- list(c("G", "T", "Q", "R"),
c("T", "G", "L", "W", "D", "Y", "*", "L", "Q", "H", "A", "P", "H", "L", "H", "L"),
c("E", "E", "D", "A", "G", "G", "R", "E", "D", "S", "I", "L", "V", "N", "G", "A", "T", "P", "\"", "\"", "C", "S", "D", "Q", "S", "S", "D", "S", "P", "P", "I", "L", "E", "A", "I", "R"),
c("S", "M", "C", "G", "*", "I", "K", "P"),
c("D", "S", "P"))
C <- list(c("G", "L", "V", "L", "A", "H", "L", "R", "R", "L", "G"),
c("G", "S", "D", "T", "P", "V", "M", "P", "K", "L", "F"),
c("N", "W", "F", "E", "N", "T", "F", "D", "F", "R", "N", "K", "R", "C", "K", "*", "V"),
c("P", "A", "T", "R", "S", "L", "R", "R", "R", "A", "T", "A"),
c("I", "G", "F", "I", "P", "S", "P", "L", "R"))
我尝试了以下方法,但这会将列表中的每个字符放在不同的行上,相当于每个列表的不同行数:
do.call(cbind, list(A,B,C))
有办法得到我想要的吗
Thx我们可以通过嵌套的
sapply
来循环列表
m1 <- sapply(list(A, B, C), function(x) sapply(x, paste, collapse=""))
setNames(as.data.frame(m1), LETTERS[1:3])
m1这里有一个基本的R方法
data.frame(do.call(mapply,
list(function(x) sapply(x, paste, collapse=""), list(A=A, B=B, C=C))))
这是回报
A B C
1 RL*TMSSSSY GTQR GLVLAHLRRLG
2 GAGPPVP TGLWDY*LQHAPHLHL GSDTPVMPKLF
3 EGREQTKGSG EEDAGGREDSILVNGATP""CSDQSSDSPPILEAIR NWFENTFDFRNKRCK*V
4 YNNDW SMCG*IKP PATRSLRRRATA
5 TK DSP IGFIPSPLR
这里,do.call
应用Map
。第二行中的列表是Map的参数,它在列表的命名列表上应用sapply
sapply
粘贴每个列表项的向量并返回向量
注:
这是试图复制亚历克西斯·拉兹(alexis laz)早些时候向我展示的方法
我最初使用的是Map
,但根据microbenchmark
的数据,mappy
似乎快了大约33%(344ms vs.513ms)
如果您想使用tidyverse
函数,您可以这样做
library(tidyverse)
lst(A,B,C) %>% map_df(map_chr, paste, collapse="")
lst()
函数允许用户创建列表并保留变量名。然后我们对列进行map()
操作,在每列中,对字符向量列表进行map()
操作并折叠它们。方法不错。我之前试过使用嵌套贴图,但不知怎么的,它无法工作。
library(tidyverse)
lst(A,B,C) %>% map_df(map_chr, paste, collapse="")