我想写一个函数,给定一个矢量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
,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
的尾递归的使用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
你的代码看起来不错,对我的作品。当你尝试'产品(c(1,2,3))'时,你会得到什么? – Gregor
@shujaa它出来1 – Lekh
我用你的代码得到'6'。我还用'Reduce(“*”,as.list(c(1,2,3)))' – GSee