【发布时间】:2018-12-13 04:26:38
【问题描述】:
我想建立一个像
这样的数据框在头部我有一个数字 n 在阶乘中,阶乘(n)是一个递归函数 在总和之前的阶乘值的总和。
我编写了一个递归函数,它成功地生成了 head 和 factorial 列,但仍然在 sum 列中挣扎。
谢谢
R代码以下
fact <- function(n, x){
if (n<=1){
return (n)
} else {
n*fact(n-1)
}
}
recurDf <- function(n, df){
if (n<=1){
df <- rbind (df, data.frame("value" = paste('Value', n) , "factorial" = n, "previous.sum" = 1) )
return (df)
} else {
if(is.null(df)) {
#df <- data.frame(matrix(ncol = 3, nrow = 0))
#colnames(df) <- c("value", "factorial", "previous.sum")
df <- data.frame("value"= 'va', "factorial" =0, "previous.sum" = 0)
}
rbind (recurDf(n-1,df), data.frame("value" = paste('Value', n) , "factorial" = fact(n), "previous.sum" = sum(recurDf(n-1,df)$factorial) ))
}
}
recurDf(4, NULL)
【问题讨论】:
-
查看函数
cumsum以创建sum列,例如cumsum(c(1,2,6,24))。您可以在第一列之外的一行中执行此操作,而不是在循环中 -
而不是
if (is.null(df)),使用if (missing(df))。然后你可以调用recurDF(4),而不是显式地传入NULL。 -
感谢@JonnyPhelps 提供的有用提示,对于 cumsum ,我无法使用它,因为我的函数比给定的示例更复杂,需要在同一个递归函数中运行 sum