R应用保留属性的功能

标签 r functional-programming

如何在应用 R 中的向量泛函(例如 sapplyvapply)后保留对象的属性(类等)?

> 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/

相关文章:

r - 如何将覆盖其他标签的箭头发送到 geom_label_repel 的后面?

haskell - 管理 FP 中的复杂状态

javascript - 使用 FRP 和 Bacon.js 优雅地处理双击和单击

r - Knitr:使用 scales 包在 ggplot 中获取计数

R表的python等价物

r - 列值的切换功能

javascript - 如何从纯 JavaScript 函数中恢复源代码?

functional-programming - 如何从对象集合中提取Map,以键作为对象同一字段之一,并为实际对象赋值

functional-programming - 模式匹配 SML?

regex - 连接 gsub