使用 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)
示例数据
> 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)