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.
You can do it this way :
R> tmp <- iris %>% `attr<-`("date", Sys.Date())
R> attr(tmp,"date")
[1] "2014-09-04"
This relies on the fact that calling :
attr(x, "foo") <- "bar"
is equivalent to calling :
x <- `attr<-`(x, "foo", "bar")
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"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With