使用merge.zoo在R中动态创建变量

时间:2013-04-30 04:32:07

标签: r function for-loop zoo

我试图创建一个自动创建zoo对象的多项式的函数。来自Python,它的典型方法是在for循环之外创建一个列表,然后在循环中附加列表。在此之后,我在R:

中编写了以下代码
library("zoo")

example<-zoo(2:8)

polynomial<-function(data, name, poly) {

##creating the catcher object that the polynomials will be attached to
returner<-data

##running the loop
for (i in 2:poly) {

#creating the polynomial
   poly<-data^i
  ##print(paste(name, i), poly)  ##done to confirm that paste worked correctly##

##appending the returner object
merge.zoo(returner, assign(paste(name, i), poly))
}
return(returner)
}

#run the function
output<-polynomial(example, "example", 4)

但是,当我运行该函数时,R不会抛出异常,但输出对象除了我最初在example zoo对象中创建的数据之外没有任何其他数据。我怀疑我误解merge.zoo或者现在可能允许动态地重新分配循环内多项式的名称。

思想?

1 个答案:

答案 0 :(得分:0)

至于代码中的错误,您错过了从merge.zooreturner的结果分配。 但是,我认为有更好的方法来实现你想要的目标。

example <- zoo(2:8)

polynomial <- function(data, name, poly) {

    res <- zoo(sapply(1:poly, function(i) data^i))
    names(res) <- paste(name, 1:4)
    return(res)
}

polynomial(example, "example", 4)
##   example 1 example 2 example 3 example 4
## 1         2         4         8        16
## 2         3         9        27        81
## 3         4        16        64       256
## 4         5        25       125       625
## 5         6        36       216      1296
## 6         7        49       343      2401
## 7         8        64       512      4096