将函数的答案存储到 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
我被提示了一个问题,并且非常接近解决我需要的问题。问题如下-
“编写一个 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