2014-10-27 124 views
1

什麼是乾淨的方式來解決以下問題? 我想用do.call來綁定一個動物園對象列表。cbind爲動物園對象列表

>> zz <- list(zoo(1:10,1:10), zoo(101:110,1:10), zoo(201:210,1:10)) 
>> names(zz)<-c('test','bar','foo') 
>> do.call(cbind,zz) 
> test bar foo 
> 1  1 101 201 
> 2  2 102 202 
> 3  3 103 203 
> 4  4 104 204 
> 5  5 105 205 
> 6  6 106 206 
> 7  7 107 207 
> 8  8 108 208 
> 9  9 109 209 
> 10 10 110 210 
>> names(zz)<-c('test','all','foo') 
>> do.call(cbind,zz) 
> test foo 
> 1  1 201 
> 2  2 202 
> 3  3 203 
> 4  4 204 
> 5  5 205 
> 6  6 206 
> 7  7 207 
> 8  8 208 
> 9  9 209 
> 10 10 210 

因爲 '所有' 是一個參數來cbind.zoo名稱:

R> args(cbind.zoo) 
function (..., all = TRUE, fill = NA, suffixes = NULL, drop = FALSE) 
NULL 

do.call構造有點像電話:

R> cbind(test=zz$test, all=zz$all, foo=zz$foo) 

同樣的事情會發生名爲'fill', '後綴'或'drop'的列表元素。

+0

'do.call(cbind.data.frame,ZZ)'也將工作,不是嗎?甚至'as.data.frame(zz)',只要所有'zz'元素的長度相同即可。 – 2014-10-27 23:00:37

回答

1

,最好的辦法是避免保留的名稱,但如果你真的必須有他們,那麼試試這個:

setNames(do.call(cbind, unname(zz)), names(zz))