Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在dplyr::group\u modify中使用purrr::mably()生成整洁的模型统计信息_R_Dplyr_Purrr_Broom - Fatal编程技术网

在dplyr::group\u modify中使用purrr::mably()生成整洁的模型统计信息

在dplyr::group\u modify中使用purrr::mably()生成整洁的模型统计信息,r,dplyr,purrr,broom,R,Dplyr,Purrr,Broom,我试图在testData中拟合许多指数模型,但是,如果要在testData$ID中改变质量增益的模式,这个模型对许多人来说都不会成功。我们的目标是生成一个broom::tidy数据框,其中报告了testData$ID中所有具有成功模型的统计信息,任何没有模型的个体都会出现在数据框中,模型统计信息为NA。下面是无法为任何ID建模的数据示例。我已经看过了,它告诉我我必须围绕抛出错误的函数包装purr::mably(),而不是broom::tidy(),因此我放弃了ExpMod_1。这方面的错误是:

我试图在
testData
中拟合许多指数模型,但是,如果要在
testData$ID
中改变质量增益的模式,这个模型对许多人来说都不会成功。我们的目标是生成一个
broom::tidy
数据框,其中报告了
testData$ID
中所有具有成功模型的统计信息,任何没有模型的个体都会出现在数据框中,模型统计信息为NA。下面是无法为任何ID建模的数据示例。我已经看过了,它告诉我我必须围绕抛出错误的函数包装purr::mably(),而不是broom::tidy(),因此我放弃了
ExpMod_1
。这方面的错误是:

错误:.f的结果应该是一个数据帧。

我还研究了,它告诉我,可能确实返回了一个函数,该函数“接受与其输入相同的参数”(-user3603486),而不仅仅是
否则
参数指定的值……这让我感到困惑,因为在这个答案中,
NA_character
似乎只是一个静态值。此运行时引发的错误是:

错误:类函数的对象没有整洁的方法

我附上了一些示例数据和代码来演示我的问题

require(tidyverse)
require(broom)

testDat<- tibble(Mass = rnorm(n = 100, mean = 3.5, sd = 0.5),
                 Days_to_Departure = sample(x = (c(1:14)),size = 100, replace = T),
                 ID = sample(x = c(1:4), size = 100, replace = T))
ExpMod_1<-testDat %>% 
  group_by(ID) %>%
  group_modify(.f = ~possibly(~tidy(nls(Mass_Visit ~ a*exp(-b*Days_to_Departure) + c, data = .x,
                                        start = list(a=1.2, b=0.5, c = 3.5),
                                        control = list(maxiter = 500),
                                        trace = T)),otherwise = ~tibble(estimate    = c(NA_real_),
                                                                       p.value      = c(NA_real_),
                                                                       statistic    = c(NA_real_),
                                                                       std.error    = c(NA_real_),
                                                                       term = c(NA_character_))))
ExpMod_2<-testDat %>% 
  group_by(ID) %>%
  group_modify(.f = ~tidy(possibly(~nls(Mass_Visit ~ a*exp(-b*Days_to_Departure) + c, data = .x,
                                        start = list(a=1.2, b=0.5, c = 3.5),
                                        control = list(maxiter = 500),
                                        trace = T),otherwise = ~list(m = NA_character_))))
require(tidyverse)
需要(扫帚)
测试数据%
组修改(.f=~可能(~tidy)(nls(大规模访问~a*exp(-b*Days\u-to\u出发)+c,数据=.x,
开始=列表(a=1.2,b=0.5,c=3.5),
控制=列表(最大值=500),
trace=T),否则=~tibble(估计=c(NA_real_uu),
p、 值=c(不适用于实际值),
统计=c(不真实),
标准误差=c(不真实),
术语=c(不带字符)
ExpMod_2%
分组依据(ID)%>%
组修改(.f=~tidy(可能是(~nls(大规模访问~a*exp(-b*Days\u-to\u出发)+c,数据=.x,
开始=列表(a=1.2,b=0.5,c=3.5),
控制=列表(最大值=500),
trace=T),否则=~list(m=NA_字符)
这两个错误对我都有意义。我想知道是否可以在打包时嵌套这些函数,或者我正在尝试的操作是否需要编写不同的函数。问题是,我正在尝试适应许多模型,我预计会有许多失败,我将用不同的模型解决这些问题…nls、lm、nlme、lmer等。但我想适应和比较所有这些,所以我需要知道什么成功,在哪里成功,何时成功


提前感谢,任何建议或反馈都将不胜感激。

我发现
的语法可能非常混乱。下面是一种使用
tryCatch
执行此操作的方法:

library(tidyverse)

testDat %>% 
  group_by(ID) %>%
  summarise(data = list(tryCatch({
    tidy(nls(Mass_Visit ~ a*exp(-b*Days_to_Departure) + c, data = .x,
            start = list(a=1.2, b=0.5, c = 3.5),
            control = list(maxiter = 500),
            trace = T))
    }, error = function(e) {
      tibble(estimate    = c(NA_real_),
             p.value      = c(NA_real_),
             statistic    = c(NA_real_),
             std.error    = c(NA_real_),
            term = c(NA_character_))
      })))

#     ID data            
#  <int> <list>          
#1     1 <tibble [1 × 5]>
#2     2 <tibble [1 × 5]>
#3     3 <tibble [1 × 5]>
#4     4 <tibble [1 × 5]>
库(tidyverse)
testDat%>%
分组依据(ID)%>%
总结(数据=列表(tryCatch({
整洁(nls(大规模访问~a*exp(-b*Days\u-to\u出发)+c,数据=.x,
开始=列表(a=1.2,b=0.5,c=3.5),
控制=列表(最大值=500),
轨迹=T)
},错误=函数(e){
tibble(估计值=c(不真实),
p、 值=c(不适用于实际值),
统计=c(不真实),
标准误差=c(不真实),
术语=c(不适用字符)
})))
#ID数据
#             
#1     1 
#2     2 
#3     3 
#4     4 

我发现
的语法可能非常混乱。下面是一种使用
tryCatch
执行此操作的方法:

library(tidyverse)

testDat %>% 
  group_by(ID) %>%
  summarise(data = list(tryCatch({
    tidy(nls(Mass_Visit ~ a*exp(-b*Days_to_Departure) + c, data = .x,
            start = list(a=1.2, b=0.5, c = 3.5),
            control = list(maxiter = 500),
            trace = T))
    }, error = function(e) {
      tibble(estimate    = c(NA_real_),
             p.value      = c(NA_real_),
             statistic    = c(NA_real_),
             std.error    = c(NA_real_),
            term = c(NA_character_))
      })))

#     ID data            
#  <int> <list>          
#1     1 <tibble [1 × 5]>
#2     2 <tibble [1 × 5]>
#3     3 <tibble [1 × 5]>
#4     4 <tibble [1 × 5]>
库(tidyverse)
testDat%>%
分组依据(ID)%>%
总结(数据=列表(tryCatch({
整洁(nls(大规模访问~a*exp(-b*Days\u-to\u出发)+c,数据=.x,
开始=列表(a=1.2,b=0.5,c=3.5),
控制=列表(最大值=500),
轨迹=T)
},错误=函数(e){
tibble(估计值=c(不真实),
p、 值=c(不适用于实际值),
统计=c(不真实),
标准误差=c(不真实),
术语=c(不适用字符)
})))
#ID数据
#             
#1     1 
#2     2 
#3     3 
#4     4 

太棒了!通过一些小的调整,这正是我想要的。作为参考,调整如下:
group\u modify(~tryCatch({tidy(nls(Mass\u Visit~a*exp(-b*Days\u to\u detairation)+c,data=.x,
)在调用对数据进行分组后。由于TIBLE in/TIBLE out行为(无需嵌套和取消测试),首选group modify函数。此外,Summary似乎对使用“.”处理哪些数据感到困惑。非常高兴能够使用它--谢谢!太棒了!经过一些小的调整,这正是我想要的。作为参考,调整如下:
group\u modify({tryCatch({tidy(nls)(Mass\u Visit~a*exp(-b*Days\u to\u出发)+c,data=.x,
在调用对数据分组后。由于tibble in/tibble out行为(无需嵌套和取消测试),首选group modify函数。此外,Summary似乎对使用哪种数据“.”感到困惑。非常高兴能够使用此功能,谢谢!