R语言如何用apply族函数获取多个dataframe每列的数据类型
R多数据表列类型批量查询实现方案
错误原因说明
你原有写法仅对列表中每个完整的data.table对象取了类属性,没有向内遍历单表的每一列执行class计算,因此只返回了表本身的类型。
正确apply族实现
最直接的写法是嵌套两层lapply,外层遍历所有待处理数据表,内层遍历单表的每一列取类型:
lapply(list(x, y), function(df) lapply(df, class))
运行后返回和输入表顺序对应的嵌套列表,每个子列表存储对应表所有列的类型结果,输出示例如下:
[[1]] [[1]]$col_1 [1] "character" [[1]]$col_2 [1] "integer" [[2]] [[2]]$col_3 [1] "integer" [[2]]$col_4 [1] "character"
其他相关函数实现方案
你提到的Map、do.call、Reduce都可以实现需求,对应写法如下:
- Map(本质是多参数版本的lapply,单参数场景下和lapply效果完全一致)
Map(function(df) lapply(df, class), list(x, y))
- do.call(适合把分散的结果合并为更规整的格式,比如合并为全局命名向量)
# 先计算所有列类型,再用do.call拼接为一个向量 col_classes <- lapply(list(x,y), function(df) sapply(df, class)) do.call(c, col_classes)
输出为:
col_1 col_2 col_3 col_4 "character" "integer" "integer" "character"
- Reduce(迭代累积操作,该场景下没必要强制使用,仅做可行性示例)
Reduce(function(res, df) c(res, lapply(df, class)), list(x,y), init = list())
内容的提问来源于stack exchange,提问作者Sweepy Dodo
相关产品推荐
相关产品推荐

