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)

ただし、関数を実行すると、R は例外をスローしませんが、出力オブジェクトには、examplezoo オブジェクトで最初に作成したもの以外の追加データはありません。私は誤解しているmerge.zooか、ループ内の多項式の名前を動的に再割り当てすることを許可されているのではないかと思います。

考え?

4

1 に答える 1

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