我想写一个函数,给定一个向量 v 计算 v 中所有条目的乘积。(R 中有一个函数可以做到这一点,但我想自己写一个。)
但是我尝试了如何获得向量中任何元素的乘积?
product <- function(v){
out <- 1
for(i in 1:length(v)){
out <- out*v[i]
}
out
}
我想写一个函数,给定一个向量 v 计算 v 中所有条目的乘积。(R 中有一个函数可以做到这一点,但我想自己写一个。)
但是我尝试了如何获得向量中任何元素的乘积?
product <- function(v){
out <- 1
for(i in 1:length(v)){
out <- out*v[i]
}
out
}
如果您将...
其用作函数的参数,则可以传递多个对象或仅传递一个对象。在函数内部,您可以转换为列表并使用递归地将Reduce
函数 ( ) 应用于列表。*
如果你结合,list
你可以使这个非常通用。以下将使用向量,或使用 2 个或更多数字,或向量和单个数字的混合。unlist
as.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
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