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

如何在多个DataFrame中使用sapply批量计算列最大值并解决名称显示问题

问题描述

我有三个DataFrame:AAA、BBB、CCC,希望批量计算每个DataFrame各列的最大值,不想重复执行sapply(AAA, max)、sapply(BBB, max)、sapply(CCC, max)。我尝试用循环实现,代码如下:

dfs = list(AAA, BBB, CCC)

for(df in dfs){
  print(deparse(substitute(df)))
  print(sapply(df, max))
  readline(prompt="Press [enter] to continue")
}

原本想用print(deparse(substitute(df)))打印出AAA、BBB、CCC,但实际输出的都是df。请问如何修复该问题?或者有没有其他方法可以同时对多个DataFrame应用sapply?

解决方案

方法一:修复循环的名称显示问题

创建列表时未保留DataFrame的原名称,导致循环无法获取对象名。给列表元素命名后,遍历列表名称即可解决:

# 为列表元素添加对应名称
dfs = list(AAA = AAA, BBB = BBB, CCC = CCC)

# 遍历列表的名称
for(df_name in names(dfs)){
  print(df_name)
  # 通过名称取出对应DataFrame并计算列最大值
  print(sapply(dfs[[df_name]], max))
  readline(prompt="Press [enter] to continue")
}

此方法会正确打印AAA、BBB、CCC,同时输出对应DataFrame的列最大值。

方法二:用嵌套sapply批量处理

无需循环,直接对命名后的列表应用嵌套sapply,一次性得到所有结果:

dfs = list(AAA = AAA, BBB = BBB, CCC = CCC)
# 外层处理列表中的每个DataFrame,内层计算各列最大值
result = sapply(dfs, function(x) sapply(x, max))
print(result)

输出结果为矩阵,行对应原DataFrame的列名,列对应AAA、BBB、CCC,可直观查看所有DataFrame的列最大值。

内容的提问来源于stack exchange,提问作者miguel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:45:35