【问题标题】:R: can I update the class of a an object in a magrittr pipe?R:我可以更新 magrittr 管道中对象的类吗?
【发布时间】:2019-10-24 10:43:22
【问题描述】:

我有一段代码用于更新对象的类。但是我必须打破代码的后面来分配课程。有没有一种优雅的方式来分配课程但继续管道所以我有一个管道一直到最终结果?我怀疑 {purrr} 中可能有什么东西?

library(disk.frame)
library(dplyr)
library(tidyquery)

a = nycflights13::airports %>%
  as.disk.frame

class(a) <- c(class(a), "data.frame")

a %>% 
  query("SELECT name, lat, lon ORDER BY lat DESC LIMIT 5")

【问题讨论】:

    标签: r purrr magrittr


    【解决方案1】:

    当然,你可以使用"class&lt;-"():

    library(dplyr)
    
    x <- 1:10 %>%
        "class<-"("foo")
    x
    #  [1]  1  2  3  4  5  6  7  8  9 10
    # attr(,"class")
    # [1] "foo"
    

    详情

    通常,在 R 中,当您可以分配给函数的输出时,例如class(x) &lt;- "foo",您使用的是“替换功能”,例如"class&lt;-"()。在 Stack Overflow 上对此进行了很好的讨论,可以在 here 找到。

    【讨论】:

    • magrittr 有别名 set_class
    • @Moody_Mudskipper 好点;我没有意识到,因为我有magrittr 的 CRAN 版本。我稍后会添加一些关于能够使用它的开发版本做到这一点
    • 哦,那是我的错,我以为它在 cran 版本中可用
    【解决方案2】:

    使用来自包data.tablesetattr()

    library(data.table)
    x <- 1:10
    x %>% setattr("class", c(class(x), "xiaodai's special"))
    x
    
     [1]  1  2  3  4  5  6  7  8  9 10
    attr(,"class")
    [1] "integer"           "xiaodai's special"
    

    【讨论】:

      猜你喜欢
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      相关资源
      最近更新 更多