在 R 中加载 csv 文件

Load csv file in R

有没有办法在 R 中加载 csv 文件并根据文件名自动定义变量?因此,如果您有一个名为 'hello' 的 csv 文件,我可以在 R 中加载它并创建 df/var。没有定义它?

因此,不要在加载过程中定义 hello:hello=read("filepath/hello");相反,我们有 read("filepath/hello") 但包括一个命令来创建和命名一个与文件名同名的变量(在这个例子中你好?)

我建议您不要在任何现实世界场景中这样做,但如果它有助于理解概念,这不是一个完整的解决方案,而是重要的组成部分。

<<- 封闭环境中的超赋值运算符,在以下情况下是全局命名空间:

rm(hello) # just in case, ignore warning if there is any

dont <- function(){
    hello <<- 42
}

print(hello)
dont()
print(hello)

因此您可以在函数内的封闭环境中定义值,而无需 return 值。

该变量的名称不必固定(如上例中的 hello),但可以取决于该函数的参数,如

dontdothis <-  function(name){
   eval(parse(text = paste0(name, " <<- 42")))
}

dontdothis("frederik")
print(frederik * 2)

您将需要添加文件操作和一些小细节,但这是可以做到的。您可能希望 google 了解 R 中的命名空间和环境以及赋值运算符,以便更好地了解其中的细节。

区分全局环境和封闭环境的简短阅读:Why is using `<<-` frowned upon and how can I avoid it?

根据您想这样做的原因,我会为您提供另一种解决方案:

我想你的问题是你有一个包含大量 csv 文件的大文件夹,你想加载所有这些文件并为变量提供 csv 文件的名称,而不需要手动输入所有内容。

那你可以运行

> setwd("C:/Users/Testuser/testfiles")
> file_names <- list.files()
> file_names
[1] "rest"      "test1.txt" "test2.csv" "test3.csv"

您使用存储所有 csv 文件的路径作为路径。

然后,如果存储了任何其他文件,而您只想拥有 csv 文件,我们必须使用正则表达式对它们进行 grep

> file_names_csv <- file_names[grepl(".csv",file_names)]
> file_names_csv
[1] "test2.csv" "test3.csv"

现在我们用for循环加载它们并将它们分配给一个名为相应csv文件的变量

for( name in file_names_csv){
  assign(paste(name, sep=""), read.csv(file = paste(name, sep="")))
}

我们有

> test2.csv
  test
1 1234
> test3.csv
  test
1 2323

您还可以在通过

加载数据之前 gsub .csv
> file_names_csv <- gsub(".csv","",file_names_csv )
> file_names_csv
[1] "test2" "test3"

所以基本上你没有使用全局变量就得到了你所要求的。