2014-10-27 10 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», «суффиксы» или «падение».

+0

'do.call (cbind.data.frame, ZZ)' также будет работать, нет? Или даже 'as.data.frame (zz)', если все элементы 'zz' имеют одинаковую длину. –

ответ

1

Лучший способ избежать зарезервированных имен, но если вы действительно должны иметь их, то попробуйте следующее:

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