You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法在含非数值列的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:22:11