我试图创建一个自动创建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
或者现在可能允许动态地重新分配循环内多项式的名称。
思想?
答案 0 :(得分:0)
至于代码中的错误,您错过了从merge.zoo
到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