2015-09-14 79 views
3

我有兩個具有相同結構的列表。我想結合它們來產生以下所需的輸出。向列表中的每個子列表添加一個向量R

A <- list(c(1,2,3,2,1,4),c(7,3,1,2,2,1),c(2,3,7,2,2,8)) 
B <- list(c(2,1,3,2),c(3,1,5,2),c(2,4,5,1)) 

# Desired Output 

[[1]] 
    [1] 1 2 3 2 1 4 
    [1] 2 1 3 2 
[[2]] 
    [1] 7 3 1 2 2 1 
    [1] 3 1 5 2 
[[3]] 
    [1] 2 3 7 2 2 8 
    [1] 2 4 5 1 

# I have tried with the items beloww and nothing works as to produce the shown desired output. Would you happen to know on how to combine the two vectors as to produce the outcome below. 

c 
cbind(A,B) 
    A   B   
[1,] Numeric,6 Numeric,4 
[2,] Numeric,6 Numeric,4 
[3,] Numeric,6 Numeric,4 

merge 
append 
+1

你可以有'地圖(列表中,A,B)'作爲「A」和「B」的對應元素不同的長度 – akrun

+0

不知道你可以在函數外使用map函數併產生預期的輸出 – Barnaby

+0

這是預期的輸出嗎? – akrun

回答

4

由於'A'和'B'中對應的list元素的長度不相同,我們可以將其保存在list中。一個方便的功能是Map在'A'和'B'的相應list元素上做到這一點。

lst <- Map(list, A, B) 

如果我們想與NA保持這個作爲matrix墊不等長,一種選擇是從library(stringi)stri_list2matrix。輸出將是一個matrix,但我們需要的character輸出轉換回numeric

library(stringi) 
lst1 <- lapply(lst, stri_list2matrix, byrow=TRUE) 
lapply(lst1, function(x) matrix(as.numeric(x),nrow=2)) 
#[[1]] 
#  [,1] [,2] [,3] [,4] [,5] [,6] 
#[1,] 1 2 3 2 1 4 
#[2,] 2 1 3 2 NA NA 

#[[2]] 
#  [,1] [,2] [,3] [,4] [,5] [,6] 
#[1,] 7 3 1 2 2 1 
#[2,] 3 1 5 2 NA NA 

#[[3]] 
#  [,1] [,2] [,3] [,4] [,5] [,6] 
#[1,] 2 3 7 2 2 8 
#[2,] 2 4 5 1 NA NA 
1

你'想要的輸出'不是很清楚。列表中的第一個元素是什麼?這是另一個列表嗎?

你可以嘗試使用mapply,並更改FUN得到不同的輸出格式:

mapply(FUN = list, A, B, SIMPLIFY = FALSE) 

,讓你列表中的列表。