R 计算向量中每个值的阶乘

R 计算向量中每个值的阶乘,r,vector,factorial,R,Vector,Factorial,我一直在努力写一个计算n的函数!对于向量的每个元素,不使用if/then语句、阶乘函数或循环。 我知道cumprod可以用于此,但无法使其工作 #Code x <- c(5, 2, 3, 8, 8, 1, 1, 7) (y <-cumprod(x[i:1])) #代码 xTryfactorial > factorial(x) [1] 120 2 6 40320 40320 1 1 5040 或gamma > gamma(x+1)

我一直在努力写一个计算n的函数!对于向量的每个元素,不使用if/then语句、阶乘函数或循环。 我知道cumprod可以用于此,但无法使其工作

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

xTry
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

避免因式分解的一种方法是循环
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)))

试试这个
sapply(x,阶乘)
你想要一个带有输入的函数,比如说index
i
?或者你希望它是一次性的?为什么需要
Vectorize
?这会比普通的
应用更快吗?@stephanmg抱歉,它不需要
矢量化,请参阅我的更新。使用
矢量化会更快吗?:)@stephanmg我不认为soBy是这样定义的:Gamma函数的定义大致如下:Gamma(n)=(n-1)!如果OP想知道为什么
x+1
。我想OP想使用
cumprod
。如果这是真的,这应该是公认的答案。也许OP需要澄清。没有cumprod():
sapply(x,函数(i)prod(seq(i)))