Search code examples
rattributesattrchainingdplyr

Adding attributes in chaining way in dplyr package


Is there any way to add an attribute using chaining sequence code operator %>% from dplyr package?

> library(dplyr)
> iris %>%
+   attr( "date") = Sys.Date()
Error in iris %>% attr("date") = Sys.Date() : 
  could not find function "%>%<-"
> 

Thanks for respone.


Solution

  • You can also consider setattr from "data.table":

    library(dplyr)
    library(data.table)
    names(attributes(iris))
    # [1] "names"     "row.names" "class" 
    
    iris %>% setattr(., "date", Sys.Date())
    names(attributes(iris))
    # [1] "names"     "row.names" "class"     "date" 
    attributes(I2)$date
    # [1] "2014-09-04"
    

    Of course, no chaining is actually required for something like this. You could just do:

    setattr(iris, "date", Sys.Date())
    

    This allows you to set attributes without copying the objects in question:

    > v1 <- 1:4
    > v2 <- 1:4
    > tracemem(v1)
    [1] "<0x0000000011cffa38>"
    > attr(v1, "foo") <- "bar"
    tracemem[0x0000000011cffa38 -> 0x0000000011d740f8]: 
    > tracemem(v2)
    [1] "<0x0000000011db2da0>"
    > setattr(v2, "foo", "bar")
    > attributes(v2)
    $foo
    [1] "bar"