ОБНОВЛЕНИЕ Чтобы обойти deplet () проблему невозможности присвоить результаты deplet объекту, мы можем заключить deplet в нашу собственную функцию, которая фактически возвращает объект l.out, который он всегда создает объект, который мы создаем. Затем мы можем изменить и отобразить наш новый дуплет так, как вы изначально хотели:
deplet2 <- function(...){
deplet(...)
return(l.out)
}
bf_AYA_popest <- b %>%
nest(data = c(BF_AYAs_count, BF_noT_effort)) %>%
mutate(fit = map(data, ~deplet2(catch = .$BF_AYAs_count,
effort = .$BF_noT_effort,
method ="l")),
results = map(fit, "results"))
СТАРЫЙ Я предвосхищу это, сказав, что никогда не использовал пакет fishmethods или функцию deplet () , Я думаю, проблема в том, что я не смог присвоить результаты функции deplet () объекту (т. Е. X <- deplet () всегда возвращал x = NULL, и объект 'l.out' ВСЕГДА создавался). Из-за этого я не уверен, что это будет хорошо играть внутри вызова mutate (). В итоге я не получил никаких ошибок, и код работал бы с картой внутри mutate, но результаты всегда были бы равны NULL (я думаю, по причинам, указанным выше - неспособность выбрать объект, в котором сохраняются результаты). </p>
Если вы открыты для этого, возможно, альтернативным предложением было бы просто использовать for-l oop и создать список результатов отдельно, а затем преобразовать весь список во вложенный фрейм данных:
#nest the count and effort data
bf_AYA_popest <- b %>%
nest(data = c(BF_AYAs_count, BF_noT_effort))
#create an empty list to store results
results_list <- vector("list")
#loop through rows of nested dataframes giving the data to deplete
for(i in 1:nrow(bf_AYA_popest)){
deplet(catch = bf_AYA_popest$data[[i]]$BF_AYAs_count,
effort = bf_AYA_popest$data[[i]]$BF_noT_effort,
method ="l")
#each time deplet runs it makes an l.out
results_list[[i]] <- l.out$results #catch the ouput and store in list
#the next run through l.out is overwrritten
}
#add the list as a column to the original nested df
bf_AYA_popest <- bf_AYA_popest %>%
mutate(fit = results_list)
Это была моя попытка выполнить эту работу внутри вызова mutate:
bf_AYA_popest <- b %>%
nest(data = c(BF_AYAs_count, BF_noT_effort)) %>%
mutate(fit = map(data, ~deplet(catch = .$BF_AYAs_count,
effort = .$BF_noT_effort,
method ="l")))
Не было выдано никаких ошибок, но результаты были в столбце NULL:
# A tibble: 2 x 3
Year data fit
<dbl> <list> <list>
1 2012 <tibble [4 × 2]> <NULL>
2 2015 <tibble [4 × 2]> <NULL>
И я бы получил объект l.out, заполненный в моей глобальной среде.