计算向量中每个值的阶乘

问题描述

我一直在试图编写一个将计算n的函数!对于向量的每个元素,而无需使用if / then语句,阶乘函数或循环。 我知道cumprod可以用于此目的,但不能使其正常工作。

#Code
x <- c(5,2,3,8,1,7)
(y <-cumprod(x[i:1]))

解决方法

尝试factorial

> factorial(x)
[1]   120     2     6 40320 40320     1     1  5040

gamma

> gamma(x+1)
[1]   120     2     6 40320 40320     1     1  5040

mapply + prod

> mapply(function(a,b) prod(a:b),1,x)
[1]   120     2     6 40320 40320     1     1  5040
,

避免factorial并使用cumprod的一种方法是循环x并执行每个值序列的cumprod,即

sapply(x,function(i) tail(cumprod(seq(i)),1))
#[1]   120     2     6 40320 40320     1     1  5040

还有两个选项:

sapply(x,function(i) Reduce(`*`,seq(i)))

作为@jogo注释,

sapply(x,function(i) prod(seq(i)))