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

循环获取data.table各列最大值失败,结果为索引序列求助

问题原因

你的代码里d[, c(i)]的写法不符合data.table的索引逻辑:在data.table的j参数中,c(i)会被当作表达式求值,这里的i是循环变量,但data.table优先在数据表的列环境中查找变量,找不到才会回到父环境。最终d[, c(i)]返回的是长度为1的向量i,而非第i列的所有数据,所以max()的结果就是i本身,导致max_values变成1:10。

解决方案

以下是几种可行的修改方式:

方式1:直接用[[提取列(最直观的循环修改)

修改循环内的取值逻辑,用[[直接提取第i列的全部数据,这和data.frame的索引逻辑一致:

library(data.table)
d <- data.frame(matrix(runif(100, 1, 100), ncol = 10))
setDT(d)

max_values <- numeric(length = ncol(d))

for (i in 1:ncol(d)) {
  max_values[i] <- max(d[[i]])
}

方式2:用get()引用列名

通过列名来提取对应列,结合get()函数在data.table环境中求值:

for (i in 1:ncol(d)) {
  col_name <- colnames(d)[i]
  max_values[i] <- d[, max(get(col_name))]
}

方式3:无循环的data.table高效写法(推荐)

利用data.table的lapply(.SD, ...)语法,一次性计算所有列的最大值,无需循环,效率更高:

max_values <- unlist(d[, lapply(.SD, max)])
# 或者转成向量
max_values <- as.vector(d[, lapply(.SD, max)])

方式4:用基础R的apply函数

如果习惯基础R写法,也可以直接用apply按列计算最大值:

max_values <- apply(d, 2, max)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:20:02