1

我正在尝试创建一个自动创建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)

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

想法?

4

1 回答 1

0

至于代码中的错误,您缺少从merge.zooto的结果分配returner。但是,我认为有更好的方法来实现你想要的。

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
于 2013-04-30T04:46:42.570 回答