尝试使用dplyr::do在内部构建模型,然后在同一个dplyr::do调用中拉取coef(model)

尝试使用dplyr::do在内部构建模型,然后在同一个dplyr::do调用中拉取coef(model),r,dplyr,R,Dplyr,我试图为一组标准曲线建立一系列线性模型 目前,该代码正在生成我想要的输出(每个线性模型的截距和斜率): slopes%分组依据(板、柱、行、浓度)%>%do( #模型=lm(值~变量,数据=), 截距=coef(lm(值~变量,数据=)[1], 斜率=coef(lm(值~变量,数据=)[2]) 但我不得不对模型行进行注释,并给lm打了两次电话。我真的想这样做: slopes2 <- STANDARDS %>% group_by(plate, col, row, conc_ug_mL

我试图为一组标准曲线建立一系列线性模型

目前,该代码正在生成我想要的输出(每个线性模型的截距和斜率):

slopes%分组依据(板、柱、行、浓度)%>%do(
#模型=lm(值~变量,数据=),
截距=coef(lm(值~变量,数据=)[1],
斜率=coef(lm(值~变量,数据=)[2])
但我不得不对模型行进行注释,并给lm打了两次电话。我真的想这样做:

slopes2 <- STANDARDS %>% group_by(plate, col, row, conc_ug_mL) %>% do(
    model = lm(value ~ variable, data = .),
    intercept = coef(.$model)[1],
    slope = coef(.$model)[2])
slopes2%分组依据(板、柱、行、浓度)%>%do(
模型=lm(值~变量,数据=),
截距=系数(.$model)[1],
斜率=系数(.$model)[2])
第二段代码不会引发错误,但对于截距和斜率都返回NULL。我认为我的问题在于不理解dplyr::do中的引用结构


但我只是在学习dplyr,不知道如何做到这一点。谢谢。

我们不需要
$model
。使用可复制的示例

 data(mtcars)
 mtcars %>%
   group_by(cyl) %>% 
   do({model = lm(wt~gear, data=.)
   data.frame(intercept= coef(model)[1], slope=coef(model)[2])})
 #    cyl intercept      slope
 # (dbl)     (dbl)      (dbl)
 #1     4  3.829406 -0.3773438
 #2     6  4.180750 -0.2757500
 #3     8  5.205208 -0.3670417

欢迎来到SO。您的问题不可复制,请参阅以了解更多信息。另外,这个和这个包可能会有帮助。这个包在这里可能会有用。谢谢@JasonAizkalns。我将确保我未来的职位符合社区的可复制性准则。我非常感谢broom软件包的推荐,我将开始使用它来帮助格式化我的dplyr输出!谢谢你的扫帚推荐@谢谢你的解决方案,并为我的例子不可复制而道歉。你能解释一下“{”的意义吗?当我试图用“{”替换“{”时,返回了一个错误,“{”只是定义了一个未命名的函数吗?@NathanDay它是用来分隔多行的。
 data(mtcars)
 mtcars %>%
   group_by(cyl) %>% 
   do({model = lm(wt~gear, data=.)
   data.frame(intercept= coef(model)[1], slope=coef(model)[2])})
 #    cyl intercept      slope
 # (dbl)     (dbl)      (dbl)
 #1     4  3.829406 -0.3773438
 #2     6  4.180750 -0.2757500
 #3     8  5.205208 -0.3670417