将函数的答案存储到 R 中的向量中

Storing Answers From Functions into a Vector in R

我被提示了一个问题,并且非常接近解决我需要的问题。问题如下-

“编写一个 while 循环,通过在每次重复大括号代码时将 mynum 减 1 来计算和存储任何非负整数 mynum 的阶乘作为一个新对象。”

另一个因素是,如果输入 0 或 1,则输出将为 1。

我写的代码如下-

factorialcalc <- function(i){
  factorial <- 1
  if(i==0 | i==1){
    factorial <- 1
  } else{
    while(i >= 1){
      factorial <- factorial * i
      i <- i-1
    }
  }
  return (factorial)
}

有输入-

mynum <- 5
factorialcalc(mynum)

并输出-

[1] 120

您可能想知道,“您的代码运行完美,那么问题是什么?” 我的问题在于问题的“计算和存储”部分。

如何修改我的代码以将 factorialcalc 的答案放入向量中?

例子- 我输入

mynum <- 5
factorialcalc(mynum)

mynum <- 3
factorialcalc(mynum)

mynum <- 4
factorialcalc(mynum)

当我调用这个新向量时,我希望看到一个包含所有三个输出的向量 (所以几乎就像我制作了一个向量 c(120,6,24))

我想有一种方法可以在我的函数或 while 循环中的某处添加此向量,但我不确定在哪里。另外,请注意答案必须包含一个循环,就像我的代码中那样。

选项 1。

“向量化”你的函数

# simply wrap the whole thing in Vectorize()
Factorialcalc = Vectorize(function(i){
  factorial <- 1
  if(i==0 | i==1){
    factorial <- 1
  } else{
    while(i >= 1){
      factorial <- factorial * i
      i <- i-1
    }
  }
  return (factorial)
})
# Now when you supply it a vector, it runs on each element
> Factorialcalc(c(5, 3, 4))
[1] 120   6  24

选项 2。

使用旨在将单个函数应用于所提供向量的多个元素的函数。 使用 purrr 包中的 map_dbl,您可以调用:

map_dbl(c(5, 3, 4), factorialcalc)

它为您的函数 factorialcalc 提供 vector 中的每个元素,并在返回向量之前连接每个结果。

使用 base R 您可以简单地使用 apply 系列函数:

sapply(c(5, 3, 4), factorialcalc)

得到相同的结果。

例子

> map_dbl(c(5, 3, 4), factorialcalc)
[1] 120   6  24
> sapply(c(5, 3, 4), factorialcalc)
[1] 120   6  24