使用 lapply/sapply 无强制创建单级列表

Creating a single-level list with lapply/sapply without coercion

示例数据

> library(data.table)
> x <- c(as.IDate("2012-01-01"), as.IDate("2012-01-02"))
> x
[1] "2012-01-01" "2012-01-02"
> class(x)
[1] "IDate" "Date"

我想跨 vector 执行一个函数,并将结果放在单层 list 中。这是理想的结果:

> y <- list(x = c(as.IDate("2012-01-01"), as.IDate("2012-01-02")))
> y
$x
[1] "2012-01-01" "2012-01-02"

> class(y)
[1] "list"
> class(y$x)
[1] "IDate" "Date" 

我已经尝试过这些解决方案,但是 lapply 喜欢构建多级 list,而 sapply 喜欢将我的 IDate 强制为 integer.

> list(x = lapply(x, function(x) x))
$x
$x[[1]]
[1] "2012-01-01"

$x[[2]]
[1] "2012-01-02"

> list(x = sapply(x, function(x) x))
$x
[1] 15340 15341

请注意 function(x) 只是一个占位符,我想表明它 sapply 是在进行强制转换,而不是函数。

我该如何解决这个问题?

我们可以使用

lapply(list(x), yourfunction)