在没有 for 循环的情况下应用用户定义的函数
Posted
技术标签:
【中文标题】在没有 for 循环的情况下应用用户定义的函数【英文标题】:applying user defined function without for loop 【发布时间】:2020-06-01 00:40:31 【问题描述】:我正在尝试使用自定义函数来解决参数的多个排列。
该函数 (yield.n) 在我调用一次时可以正常工作,例如: 产量.n(naa, F, M, S, Y) naa 是一个大型数据框 (750000 x 17),F、M 和 Y 是数字对象,S 是向量。
我想用这个函数解决 Y 的各种值。我尝试了 apply 系列的多种排列,但我无法提出函数代码。 如果我对 Y 的值(代码崩溃)运行 for 循环,它可以正确解决,但速度很慢。
yn.out <- NULL
for(yr in 50:150)
yr.out <- yield.n(naa, ssf, M, S, yr)
yr.out <- cbind(yr.out, yr)
yn.out <- rbind(yn.out, yr.out)
yn.out <- as.data.frame(yn.out)
我如何获得一个应用函数来解决这个问题以解决 Y 的多个值?
该函数的代码如下(但我不确定这与手头的问题是否相关)。
function(naa, F, M, S, Y)
yr <- Y
naa.lci <- aggregate(naa[, 1:16], list(naa$year),
"quantile", probs = .05)
naa.m <- aggregate(naa[, 1:16], list(naa$year),
"quantile", probs = .5)
naa.uci <- aggregate(naa[, 1:16], list(naa$year),
"quantile", probs = .9)
yield.n.lci <- round(sum(((F*S)/(M + (F*S))) * (1- exp(-M-(F*S))) *
naa.lci[yr, 2:17]))
yield.n.m <- round(sum(((F*S)/(M + (F*S))) * (1- exp(-M-(F*S))) *
naa.m[yr, 2:17]))
yield.n.uci <- round(sum(((F*S)/(M + (F*S))) * (1- exp(-M-(F*S))) *
naa.uci[yr, 2:17]))
yield.out <- cbind(yield.n.lci, yield.n.m, yield.n.uci)
return(yield.out)
【问题讨论】:
【参考方案1】:尝试以下方法:
yn.out <- do.call(rbind, lapply(50:150, function(y)
cbind(yield.n(naa, F, M, S, y), yr = y)))
或使用purrr::map_df
yn.out <- purrr::map_df(50:150, ~cbind(yield.n(naa, F, M, S, .x), yr = .x))
【讨论】:
以上是关于在没有 for 循环的情况下应用用户定义的函数的主要内容,如果未能解决你的问题,请参考以下文章
Pandas:自定义 WMAPE 函数聚合函数到多列而没有 for 循环?
有没有办法在不使用用户定义函数的情况下在 SQL 中动态执行查询?
函数高级类型名别名if-else 的使用包的使用for循环swich的使用数组的使用
C 语言文件操作 ( 配置文件读写 | 框架搭建 | 主函数逻辑结构 | 启动无限循环 | 接收用户操作值 | 宏定义 | 显示操作菜单 )