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

R语言中列表内dataframe设置小数位数时如何排除第一列

R语言处理DataFrame列表时排除第一列的修改方案

问题原因

原代码直接将完整DataFrame传入舍入函数,函数默认对所有列生效,导致存储序号的第一列Determination_No也被应用了舍入格式化规则。

修改方案

只需调整dataDecimal函数的内部逻辑,拆分第一列和数值列分别处理即可,完整修改后的代码如下:

AnalyteDecList <- c("Al2O3", "As", "Ba")

decimlist <- data.frame(analytes = AnalyteDecList,
                        value.dec = c(2,3,3),
                        sd.Dec = c(3,4,4))

# 修改后的舍入函数
dataDecimal <- function(df, value.dec, ...){
  # 单独保留第一列,不做任何处理
  first_col <- df[, 1, drop = FALSE]
  # 仅对除第一列外的数值列应用舍入+格式化规则
  process_cols <- lapply(df[, -1, drop = FALSE], function(col) {
    format(round(col, digits = value.dec), nsmall = value.dec)
  })
  # 合并为原结构的DataFrame返回
  return(cbind(first_col, process_cols))
}

# 原Map调用无需修改
df <- Map(dataDecimal, df[decimlist$analytes], decimlist$value.dec)

说明

  • 参数drop = FALSE用于避免单列数据被自动转为向量,保证数据结构始终为DataFrame,合并后和原列表的结构完全一致
  • 第一列的序号值会完全保留原始状态,仅后续的数值测定列会按指定的小数位数进行舍入格式化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:09:02