Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 向量元素的乘积_R - Fatal编程技术网

R 向量元素的乘积

R 向量元素的乘积,r,R,我想写一个函数,给定一个向量v,计算v中所有项的乘积。(R中有一个函数可以实现这一点,但我想自己编写一个。) 我试过了,但我怎么能得到向量中任何元素的乘积呢 product <- function(v){ out <- 1 for(i in 1:length(v)){ out <- out*v[i] } out } product如果将..用作函数的参数,则可以向其传递多个对象或一个对象。在函数内部,您可以转换为列表,并使用Red

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

我试过了,但我怎么能得到向量中任何元素的乘积呢

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

product如果将
..
用作函数的参数,则可以向其传递多个对象或一个对象。在函数内部,您可以转换为列表,并使用
Reduce
将函数(
*
)递归应用于列表。如果将
列表
取消列表
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
>产品产品(2、7、3)
[1] 42
>产品(c(2,7,3))
[1] 42
>产品(2,c(7,3))
[1] 42

如果使用
..
作为函数的参数,则可以向其传递多个对象或一个对象。在函数内部,您可以转换为列表,并使用
Reduce
将函数(
*
)递归应用于列表。如果将
列表
取消列表
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
>产品产品(2、7、3)
[1] 42
>产品(c(2,7,3))
[1] 42
>产品(2,c(7,3))
[1] 42

使用
调用
进行尾部递归:

 prd2 <- function(x)
     if(length(x) == 2) { x[1] *x[-1] } else x[1] * Recall(x[-1])
 prd2(c(2,3,4))
#[1] 24

prd2使用
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

prd2您的代码看起来不错,适合我。当你尝试
产品(c(1,2,3))
时,你得到了什么?我用你的代码得到了
6
。我还得到了
6
Reduce(“*”,as.list(c(1,2,3))
是的,谢谢!但是你的代码是我想要的,它适用于任何类型的元素。小心你的术语!您需要一个接受多个参数的函数。元素是向量中的单个项,参数是您赋予函数的内容。谢谢@谢谢你纠正我的错误。你的代码看起来不错,适合我。当你尝试
产品(c(1,2,3))
时,你得到了什么?我用你的代码得到了
6
。我还得到了
6
Reduce(“*”,as.list(c(1,2,3))
是的,谢谢!但是你的代码是我想要的,它适用于任何类型的元素。小心你的术语!您需要一个接受多个参数的函数。元素是向量中的单个项,参数是您赋予函数的内容。谢谢@shujaa,谢谢你纠正我。我可能错过了一个角落或其他什么,但我想如果有列表输入而不是向量,我的方法将不起作用,但你的方法仍然起作用。不知道是否有人还在读这篇文章,但为什么
列表
,然后
取消列表
-ing,和
as.list
再次使此函数更通用???难道它不只是拿一个列表,把它拆开,然后再把它放回一个列表中吗?我可能错过了一个角落或者什么,但是我想如果有列表输入而不是向量,我的方法会不起作用,但是你的方法仍然起作用。不知道是否还有人在读这个,但是为什么
列表
,然后
unlist
-ing和
as.list
再次使此函数更通用???难道它不只是把一个列表,把它拆开,然后再把它放回一个列表吗?