如何遍历全局环境中的对象 - R.

时间:2017-06-22 19:04:23

标签: r lapply xts quantmod

我已经远远地看了解这个问题,但我似乎无法弄明白。我在R中使用xts对象的经验不多。

我有40个xts对象(ETF数据),我想分别在每个对象上运行quantmod函数WeeklyReturn

我尝试使用ls()函数来引用它们:

lapply(ls(), weeklyReturn) 

我也尝试了object()功能

lapply(object(), weeklyReturn)

我也尝试在我的调用中使用as.xts()来强制将ls()对象用作xts,但无济于事。

如何在环境中的每个xts对象上运行此函数?

谢谢,

1 个答案:

答案 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函数将字符串作为参数,并返回具有该名称的对象。