我使用do.call
和cbind
將幾個xts對象組裝成更通用的容器data
。我的目標是實現一個循環,用於直接通過矢量名稱添加對象。如何將do.call和cbind與循環中的對象列表一起使用?
這裏原來do.call
:
data <- do.call(cbind, c(eapply(e, Cl),
list(A),
list(B),
list(C),
list(D)
))
解釋包含XTS目的和data
也是XTS對象。
> str(A)
An ‘xts’ object on 2014-01-02/2015-05-25 containing:
Data: num [1:360, 1] 100 98.9 98.5 98.4 98.7 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr "A"
Indexed by objects of class: [Date] TZ: UTC
xts Attributes:
NULL
當我定義與與XTS對象的名稱向量:
objects <- c(
"A",
"B",
"C",
"D"
)
,然後試圖通過他們做一個循環,R logicaly處理矢量字符,只有最後一個條目被添加,在這裏"D"
。
如果我告訴list
處理o
作爲XTS對象與as.xts
,R返回一個錯誤,說有對階級性的對象as.xts沒有適用的方法。我的理解是,as.xts
必須用於像data.frame這樣的多維數據,這在這裏是不合適的。
for (o in objects){
data <- do.call(cbind, c(eapply(e, Cl), list(as.xts(o))))
}
我不想從頭開始創建新的XTS對象與xts
怎麼能告訴list
是o
是一個對象,而不是一個字符串?還是應該使用完全不同的方法?
見'GET'緩慢,低效的方式?我想'as.xts(get(o))'是你正在尋找的。 – nicola
很高興知道。謝謝。它添加了最後一個條目,這裏'D'在容器內,但由於某種原因'do.call'不會追加這些對象。我需要首先把所有的對象放在一個列表中,然後'do.call'? – Florent