问题描述
我一直在试图编写一个将计算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)))