首页 > 解决方案 > 我们不能将管道链输出传递给线性模型 lm() 点占位符吗?

问题描述

我想知道如何将管道操作的输出直接传递到lm().

例如,我可以将以下yay向量lm()直接传递给。

set.seed(40)
yay = c(rnorm(15), exp(rnorm(15)), runif(20, min = -3, max = 0))
lm(yay~1)

#> Call:
#> lm(formula = yay ~ 1)

#> Coefficients:
#> (Intercept)  
#>    -0.09522  

但是当我尝试这样的事情时,它抛出了一个错误。

library(tidyverse)
library(palmerpenguins)

data("penguins")

filter_penguins <- penguins %>% filter(species == "Adelie") 

filter_penguins %>% 
  filter(island == "Torgersen") %>% 
  select(bill_length_mm) %>%
  pull() %>% 
  lm(. ~ 1)

#> Error in formula.default(object, env = baseenv()) : invalid formula

我还尝试将pull()输出保存到对象中,然后将其输入lm(),它可以工作。但是为什么点占位符不能这样工作呢?

非常感谢。

标签: rtidyverselmmagrittr

解决方案


这个问题是lm()在管道内部将给定的数据视为formula参数。因此,数据放错了位置。尝试:

filter_penguins %>% 
  filter(island == "Torgersen") %>% 
  select(bill_length_mm) %>%
  lm(data = ., pull(.) ~ 1)

推荐阅读