我想编写一个函数,给定一个向量v计算v中所有条目的乘积(R中有一个函数可以执行此操作,但我想自己编写一个。)
但我尝试了如何获取向量中任何元素的产品?
product <- function(v){
out <- 1
for(i in 1:length(v)){
out <- out*v[i]
}
out
}
答案 0 :(得分:4)
如果使用...
作为函数的参数,则可以传递几个对象或只传递一个。在函数内部,您可以转换为列表并使用Reduce
以递归方式将函数(*
)应用于列表。如果您将list
,unlist
和as.list
合并,则可以使其非常通用。以下内容适用于矢量,或2个或更多数字,或矢量和单个数字的混合。
> 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
答案 1 :(得分: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