如何在应用 R 中的向量泛函(例如 sapply
或 vapply
)后保留对象的属性(类等)?
> d <- c(as.POSIXct(Sys.time()), as.POSIXct(Sys.time()) + 60)
> typeof(d)
[1] "double"
> class(d)
[1] "POSIXct" "POSIXt"
> sapply(d, function(x) x)
[1] 1510760756 1510760816
> vapply(d, function(x) x, double(1))
[1] 1510760756 1510760816
我可以用
来规避这个问题> do.call(c, as.list(d))
[1] "2017-11-15 16:45:56 CET" "2017-11-15 16:46:56 CET"
但我必须先建立一个列表。
谢谢!
最佳答案
sapply
有一个默认参数 simplify = TRUE
,它强制输出为向量、矩阵或高维数组。如果将其更改为 FALSE
:
> sapply(d, function(x) x, simplify = FALSE)
[[1]]
[1] "2018-02-21 12:43:52 CET"
[[2]]
[1] "2018-02-21 12:44:52 CET"
你得到一个列表。
请注意,这与您从 lapply(d, function(x) x)
获得的结果相同。
但是如果你不想要最后的列表,Grothendieck 的评论对我来说似乎是最干净的方式。如果你想让它稍微干净一些,你可以将它包装在一个高阶函数中:
> m.sapply <- function(x, ...) "attributes<-"(sapply(x, ...), attributes(x))
> m.sapply(d, function(x) x)
[1] "2018-02-21 12:43:52 CET" "2018-02-21 12:44:52 CET"
关于R应用保留属性的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47311855/