为何无法在含非数值列的data.frame列表上使用sapply?
解决方案
1. 指定目标列范围求和
既然你明确知道要计算第4至22列的和,直接在sapply的自定义函数中选取这些列再执行求和即可:
# 适配你提供的示例代码(示例中仅第3列为数值列,故用3替代4:22) sapply(teste_lista, function(x) sum(x[, 3])) # 对应你实际需求的代码(处理第4-22列,同时忽略缺失值) sapply(your_list, function(x) sum(x[, 4:22], na.rm = TRUE))
添加na.rm = TRUE是为了避免因数据中存在缺失值导致求和结果为NA。
2. 自动筛选数值列求和
如果列的位置可能变动,或者想自动忽略所有非数值列,可以先筛选出每个data.frame中的数值型列再求和:
sapply(teste_lista, function(x) sum(x[sapply(x, is.numeric)], na.rm = TRUE))
这段代码会先遍历每个data.frame的列,判断是否为数值类型,仅保留符合条件的列后计算总和。
报错原因
你遇到的错误'only defined on a data frame with all numeric-alike variables',是因为直接对包含字符列的data.frame调用sum()时,sum函数要求传入的对象必须是全数值型的,混合类型的数据框无法被直接处理。
内容的提问来源于stack exchange,提问作者SanTio
相关产品推荐
相关产品推荐

