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

在R中导入多个.csv文件并添加row.names=1参数的问题

解决R中批量导入CSV并设置第一列为行名的问题

我来帮你搞定这个导入问题!你遇到的报错主要是两个小细节导致的:正则表达式写法有误,以及read.csv参数传递的方式需要调整。下面是完整的可行方案:

修正后的代码方案

你可以直接使用这段代码,它能正确批量导入CSV文件,同时将第一列设为行名:

# 1. 获取当前目录下所有CSV文件(注意正则的正确写法)
temp <- list.files(pattern = "\\.csv$")

# 2. 批量导入并设置行名,同时将数据框加载到全局环境
list2env(
  lapply(
    setNames(temp, make.names(gsub("\\.csv$", "", temp))),
    read.csv, 
    row.names = 1  # 直接给read.csv传递行名参数
  ),
  envir = .GlobalEnv
)

如果需要更清晰的逻辑(比如后续要加更多read.csv参数),可以用匿名函数写法:

temp <- list.files(pattern = "\\.csv$")
# 给每个CSV文件设置对应的变量名(去掉.csv后缀并转为合法变量名)
named_files <- setNames(temp, make.names(gsub("\\.csv$", "", temp)))

list2env(
  lapply(named_files, function(file_path) {
    read.csv(file_path, row.names = 1)
  }),
  envir = .GlobalEnv
)

为什么原来的代码会出错?

  1. 正则表达式错误:你原来用的gsub("*.csv$", "", temp)里,*.csv不是合法的正则写法。正则中*表示匹配前面字符0次或多次,而.是匹配任意字符,正确匹配.csv后缀应该用\\.csv$(用\\转义.,让它只匹配实际的点号)。
  2. 参数传递的潜在歧义:直接在lapply的FUN后加参数时,需要确保参数是传递给read.csv的,上面的写法已经帮你规避了这个问题。

额外注意事项

  • 确保所有CSV文件的第一列都是唯一的、合法的行名(不能有重复值,不能包含特殊字符),否则row.names=1会抛出错误。
  • 如果你的CSV文件用了非逗号分隔符(比如分号),可以额外添加sep=";"参数到read.csv中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:23:41