应用于多个数据框中的每一列

Apply to each column in multiple dataframes

如果我要找到每一列的 class,我通常会(假设我想避免 str):

lapply(df, class)

但是,如果我想对多个数据帧执行相同的操作怎么办?例如:

x <- data.table(col_1 = c('a', 'b')
                , col_2 = 1:2
                ); x

y <- data.table(col_3 = 3:4
                , col_4 = c('c', 'd')
                ); y

我的尝试是:

lapply(1:2, function(i) class( list(x,y)[[i]] ) )

但它给出:

[[1]]
[1] "data.table" "data.frame"

[[2]]
[1] "data.table" "data.frame"

R 无法应用于列表中每个元素(在本例中为每个数据框)内的列。如果我追求 apply 解决方案(尤其不是 For loopstr),那会是什么? 或者 ReduceMapdo.call 也能做到这一点吗? 谢谢。

将数据表放入列表中,然后使用 lapply 对其进行迭代。

lapply(list(x, y), function(x) sapply(x, class))

#[[1]]
#      col_1       col_2 
#"character"   "integer" 

#[[2]]
#      col_3       col_4 
#  "integer" "character" 

由于xy继承自列表,它们可以连接起来,因此您可以使用

lapply(c(x,y), class)
# $col_1
# [1] "character"
# 
# $col_2
# [1] "integer"
# 
# $col_3
# [1] "integer"
# 
# $col_4
# [1] "character"

我们可以使用

library(purrr)
map(c(x, y), class)
$col_1
[1] "character"

$col_2
[1] "integer"

$col_3
[1] "integer"

$col_4
[1] "character"

我们可以使用基数 R Map:

Map(class,c(x,y))
$col_1
[1] "character"

$col_2
[1] "integer"

$col_3
[1] "integer"

$col_4
[1] "character"