2017-04-26 67 views
0

原諒我,如果此之前已要求列表中的每個條目...結合列表與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 <- 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")) 
多個列表

我想是這樣的:

A   B          C 
RL*TMSSSSY GTQR         GLVLAHLRRLG 
GAGPPVP  TGLWDY*LQHAPHLHL      GSDTPVMPKLF 
EGREQTKGSG EEDAGGREDSILVNGATP""CSDQSSDSPPILEAIR NWFENTFDFRNKRCK*V 
YNNDW  SMCG*IKP        PATRSLRRRATA 
TK   DSP          IGFIPSPLR 

我試過以下,但這個放列表的每一個人物在不同的行等同於不同的行數爲每個列表的:

do.call(cbind, list(A,B,C)) 

有沒有辦法得到我想要的東西?

THX

回答

1

如果你想使用tidyverse功能,你可以做

library(tidyverse) 
lst(A,B,C) %>% map_df(map_chr, paste, collapse="") 

lst()功能允許使用做一個列表,並保持變量名。然後我們map()在列上,並在每列中map()上覆蓋字符向量列表並將它們摺疊。

+0

不錯的做法。我之前嘗試過使用嵌套地圖,但不知何故無法正常工作。 – akrun

0

我們可以在list

m1 <- sapply(list(A, B, C), function(x) sapply(x, paste, collapse="")) 
setNames(as.data.frame(m1), LETTERS[1:3]) 
0

這裏是一個基地R法具有嵌套sapply這樣對循環。

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粘貼每個列表項的向量並返回一個向量。

注:

  1. 這是在複製方法亞歷克西斯 - LAZ試圖更早here給我看。
  2. 我原來使用Map,但mapply根據microbenchmark似乎大約快33%(344ms比513ms)。
相關問題