【发布时间】:2020-04-09 20:23:53
【问题描述】:
我想使用 purrr::map() 来运行一个预打包的函数 fishmethods::deplet
数据集有多年(见下面的示例),我需要为每一年分别拟合模型。
b <- structure(list(Year = c(2012, 2012, 2012, 2012, 2015, 2015, 2015,
2015), BF_AYAs_count = c(37, 12, 7, 8, 13, 4, 3, 6), BF_noT_effort = c(0.445138888899237,
0.343750000007276, 0.51597222223063, 0.444444444437977, 0.613194444456894,
0.437499999992724, 0.374999999992724, 0.607638888897782)), row.names = c(NA,
-8L), class = c("tbl_df", "tbl", "data.frame"))
deplet 需要以下输入 (catch=NULL,effort=NULL, method = "l") 并输出一个列表 X.out,其中 X == method。出于我的目的,我想按年份获取结果(例如,l.out$results)并将它们放入数据框中。这是我尝试过的代码,它返回
Error in deplet(catch = BF_AYAs_count, effort = BF_noT_effort, method = "l") :
object 'BF_AYAs_count' not found
我认为这是由 deplet() 函数期望数据输入的方式引起的问题,因为如果我替换为 map(data, ~lm(BF_AYAs_count~BF_noT_effort, data=.),则此代码可以正常工作。
library(tidyverse)
library(fishmethods)
bf_AYA_popest <- b %>%
nest(-Year) %>%
mutate(fit=map(data, deplet(catch=BF_AYAs_count,effort=BF_noT_effort, method="l")),
results = l.out$results) %>%
unnest()
【问题讨论】: