我的文件名是工作目录中的all.files。我想循环读取这些文件,并为每个文件将名称分配为gsub(".csv","", all.files)
。
all.files <- c("harvestA.csv", "harvestB.csv", "harvestC.csv", "harvestD.csv",
"seedA.csv", "seedB.csv", "seedC.csv", "seedD.csv")
我在下面尝试了类似的方法,但是它不起作用。我在这里需要什么?
for(i in 1:length(all.files)){
assign(gsub(".csv","", all.files)[i]) <- read.table(
all.files[i],
header = TRUE,
sep = ","
)
}
答案 0 :(得分:2)
您可以将它们保留在命名列表中,因为用大量全局变量来使环境混乱不是一种好习惯
list_df <- lapply(all.files, read.csv)
names(list_df) <- sub("\\.csv", "", all.files)
您始终可以将单个数据帧提取为list_df[["harvestA"]]
,list_df[["harvestB"]]
等。
如果您仍然需要将它们作为单独的数据框
list2env(list_df, .GlobalEnv)
答案 1 :(得分:1)
.
是正则表达式中与任何字符匹配的元字符。因此,我们可以使用fixed = TRUE
来匹配文字点。另外,在OP的代码中,使用assign
时,不需要另一个赋值运算符(<-
),assign
中的第二个参数是value
,这里是用read.table
for(i in 1:length(all.files)){
assign(sub(".csv","", all.files, fixed = TRUE)[i], read.table(
all.files[i],
header = TRUE,
sep = ","
))
}
答案 2 :(得分:0)
使用strsplit
for (i in seq_along(all.files)) {
assign(x = strsplit(allfiles[i],"\\.")[[1]][1],
value = read.csv(all.files[i]),
pos = .GlobalEnv)
}