使用'时出错;分段';从tidyverse和#x27的输出中提取lm;地图';在R
我使用“分段”软件包来寻找R中线性回归的断点使用'时出错;分段';从tidyverse和#x27的输出中提取lm;地图';在R,r,purrr,R,Purrr,我使用“分段”软件包来寻找R中线性回归的断点 library(tidyverse) library(segmented) df <- data.frame(x = c(1:10), y = c(1,1,1,1,1,6:10)) lm_model <- lm(y ~ x, data = df) seg_model <- segmented(obj = lm_model, seg.Z = ~ x) 库(tidyverse) 图书馆(分段) df这基本上是同一个问题 lm()。但
library(tidyverse)
library(segmented)
df <- data.frame(x = c(1:10), y = c(1,1,1,1,1,6:10))
lm_model <- lm(y ~ x, data = df)
seg_model <- segmented(obj = lm_model, seg.Z = ~ x)
库(tidyverse)
图书馆(分段)
df这基本上是同一个问题
lm()。但是,当被map()
调用时,提供的表达式是
,在该map()
调用的直接上下文之外没有任何意义,并导致您观察到的错误
与另一个问题一样,一种解决方法是为lm()
定义一个包装器,该包装器直接在数据集上构成一个自定义调用,然后由lm()
捕获为一个未计算的表达式
# Composes a custom lm() expression and evaluates it
lm2 <- function(data, ...)
eval( rlang::expr(lm(data=!!rlang::enexpr(data), !!!list(...))) )
# Now mapping using lm2, instead of lm
map_test <- nest(df, data=everything()) %>%
mutate(map_lm = map(data, lm2, y ~ x),
param_map_lm = map(map_lm, broom::tidy))
# The data is stored directly inside the lm object
# segmented() now has no problems accessing it
map_lm_model <- map_test[[2]][[1]]
map_seg_model <- segmented(obj = map_lm_model, seg.Z = ~ x)
# Call: segmented.lm(obj = map_lm_model, seg.Z = ~x)
#
# Meaningful coefficients of the linear terms:
# (Intercept) x U1.x
# 1.000e+00 6.344e-15 1.607e+00
#
# Estimated Break-Point(s):
# psi1.x
# 3.889
这基本上是同一个问题
lm()。但是,当被map()
调用时,提供的表达式是
,在该map()
调用的直接上下文之外没有任何意义,并导致您观察到的错误
与另一个问题一样,一种解决方法是为lm()
定义一个包装器,该包装器直接在数据集上构成一个自定义调用,然后由lm()
捕获为一个未计算的表达式
# Composes a custom lm() expression and evaluates it
lm2 <- function(data, ...)
eval( rlang::expr(lm(data=!!rlang::enexpr(data), !!!list(...))) )
# Now mapping using lm2, instead of lm
map_test <- nest(df, data=everything()) %>%
mutate(map_lm = map(data, lm2, y ~ x),
param_map_lm = map(map_lm, broom::tidy))
# The data is stored directly inside the lm object
# segmented() now has no problems accessing it
map_lm_model <- map_test[[2]][[1]]
map_seg_model <- segmented(obj = map_lm_model, seg.Z = ~ x)
# Call: segmented.lm(obj = map_lm_model, seg.Z = ~x)
#
# Meaningful coefficients of the linear terms:
# (Intercept) x U1.x
# 1.000e+00 6.344e-15 1.607e+00
#
# Estimated Break-Point(s):
# psi1.x
# 3.889
map_test <- nest(df, data=everything()) %>%
mutate(map_lm = map(data, lm2, y ~ x),
param_map_lm = map(map_lm, broom::tidy),
seg_lm = map(map_lm, segmented, seg.Z=~x))
# # A tibble: 1 x 4
# data map_lm param_map_lm seg_lm
# <list<df[,2]>> <list> <list> <list>
# 1 [10 × 2] <lm> <tibble [2 × 5]> <segmentd>