【问题标题】:How to use pipe %>% in R with dollar sign?如何在带有美元符号的R中使用管道%>%?
【发布时间】:2021-12-29 10:50:51
【问题描述】:

我的问题是我希望使用管道来简化我的代码。但在其中一个步骤中,我只想提取并继续处理数据中的一个元素。 详情请看下面的代码

data1 <-coef(df)
data2 <-as.data.frame(data1$a)

所以我需要运行一个名为“coef”的函数,它会返回一个结果列表,比如“a,b,c,d”,但我只对“a”感兴趣。通常我会存储完整的结果,然后使用美元符号 $ 存储我感兴趣的结果。但是我想知道我是否也可以在管道中执行类似于下面的代码的操作,但现在显然行不通。

data2<-df %>%
  coef() %>%
  select(a) %>%
  as.data.frame ()

【问题讨论】:

  • 这样的? mtcars %&gt;% .$mpg
  • 如果 a 是数据框中的向量(或列),您可以使用 df %>% dplyr::pull(a) 提取结果。这就像输入 df$a。不过,我不完全确定这是您想要做的。

标签: r pipe


【解决方案1】:

coef() 给你一个向量,所以$ 不适用。但是你可以使用getElement()

lm(mpg ~ am + hp, mtcars) |>
  coef() |>
  getElement('am') 
# [1] 5.277085

当然也适用于magrittr 管道%&gt;%

【讨论】:

    【解决方案2】:

    我们假设问题是询问如何从数据框中提取列。稍后我们假设另一种方法是询问如何从作用于lm 模型的内置coef 中挑选一个系数。下次请提供完整的可重现代码和输入,以便我们确定所要求的内容。

    这里有几种使用内置BOD数据框的方法。

    library(magrittr)
    
    BOD %$% Time
    ## [1] 1 2 3 4 5 7
    
    BOD %>% extract2("Time")
    ## [1] 1 2 3 4 5 7
    
       
    # can use library(magrittr) or library(dplyr) for any of these
    
    BOD %>% with(Time)
    ## [1] 1 2 3 4 5 7
    
    BOD %>% .$Time
    ## [1] 1 2 3 4 5 7
    
    BOD %>% .subset2("Time")
    ## [1] 1 2 3 4 5 7
     
    BOD %>% .[["Time"]]
    ## [1] 1 2 3 4 5 7
    
    
    library(dplyr)
    BOD %>% pull(Time)
    ## [1] 1 2 3 4 5 7
    

    如果问题中的意思是 coef 正在从 lm 模型中提取系数并且我们想要其中一个,那么我们有以下相同的内容,除了在某些情况下我们需要添加 as.list 到管道。

    library(magrittr)
    
    # this is used by all the pipelines below
    co <- BOD %>% lm(demand ~ Time, .) %>% coef
    
    
    co %>% as.list %$% Time
    ## [1] 1.721429
    
    co %>% extract2("Time")
    ## [1] 1.721429
    
    # can use library(magrittr) or library(dplyr) for any of these
    
    co %>% as.list %>% with(Time)
    ## [1] 1.721429
    
    co %>% as.list %>% .$Time
    ## [1] 1.721429
    
    co %>% .subset2("Time")
    ## [1] 1.721429
     
    co %>% .[["Time"]]
    ## [1] 1.721429
    

    【讨论】:

    • 还有pluck
    猜你喜欢
    • 1970-01-01
    • 2022-09-25
    • 2013-04-01
    • 2021-02-20
    • 2012-01-27
    • 2019-05-22
    • 2012-09-30
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多