1

ベクトル v が与えられた場合、v のすべてのエントリの積を計算する関数を書きたいと思います (R にはこれを行う関数がありますが、自分で書きたいと思います)。

私は試しましたが、ベクトル内の要素の積を取得するにはどうすればよいですか?

product <- function(v){
    out <- 1
    for(i in 1:length(v)){
       out <- out*v[i]
    }
    out
}
4

2 に答える 2

4

関数への引数としてを使用する場合...、複数のオブジェクトまたは 1 つだけを渡すことができます。関数内では、リストに変換し、関数 ( ) をリストに再帰的Reduceに適用するために使用できます。*を組み合わせるとlist、これを非常に一般的なものにすることができます。以下は、ベクトル、2 つ以上の数値、またはベクトルと単一の数値の混合で機能します。unlistas.list

> product <- function(...) Reduce("*", as.list(unlist(list(...))))
> product(2, 7, 3)
[1] 42
> product(c(2, 7, 3))
[1] 42
> product(2, c(7, 3))
[1] 42
于 2012-09-25T02:56:39.630 に答える
1

Recall末尾再帰の使用:

 prd2 <- function(x)
     if(length(x) == 2) { x[1] *x[-1] } else x[1] * Recall(x[-1])
 prd2(c(2,3,4))
#[1] 24
于 2012-09-25T15:28:34.717 に答える