我已经远远地看了解这个问题,但我似乎无法弄明白。我在R中使用xts对象的经验不多。
我有40个xts对象(ETF数据),我想分别在每个对象上运行quantmod函数WeeklyReturn
。
我尝试使用ls()
函数来引用它们:
lapply(ls(), weeklyReturn)
我也尝试了object()
功能
lapply(object(), weeklyReturn)
我也尝试在我的调用中使用as.xts()
来强制将ls()对象用作xts,但无济于事。
如何在环境中的每个xts对象上运行此函数?
谢谢,
答案 0 :(得分:6)
最好将所有xts对象加载到列表中,或者以一种在列表中返回它们的方式创建它们。然后你可以做results = lapply(xts.list, weeklyReturn)
。
要在全局环境中使用对象,您可以测试该对象是否为xts
对象,然后在其上运行weeklyReturn
。像这样:
results = lapply(setNames(ls(), ls()), function(i) {
x = get(i)
if(is.xts(x)) {
weeklyReturn(x)
}
})
results = results[!sapply(results, is.null)]
或者您只能选择xts对象开头:
results = sapply(ls()[sapply(ls(), function(i) is.xts(get(i)))],
function(i) weeklyReturn(get(i)), simplify=FALSE, USE.NAMES=TRUE)
lapply(ls(), weeklyReturn)
不起作用,因为ls()
将对象名称作为字符串返回。 get
函数将字符串作为参数,并返回具有该名称的对象。