1

我想写一个函数,给定一个向量 v 计算 v 中所有条目的乘积。(R 中有一个函数可以做到这一点,但我想自己写一个。)

但是我尝试了如何获得向量中任何元素的乘积?

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

2 回答 2

4

如果您将...其用作函数的参数,则可以传递多个对象或仅传递一个对象。在函数内部,您可以转换为列表并使用递归地将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 回答