Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 函数读取多个csv_R - Fatal编程技术网

R 函数读取多个csv

R 函数读取多个csv,r,R,我创建了一个函数,允许将csv分配到变量中。但是它不起作用,我也不知道为什么。代码如下: file_id <- readline("Type a common word for your files: ") file_list <- list.files(pattern = file_id) multi.csv <- function(pattern.seq) { for(i in 1:length(pattern.seq)) {

我创建了一个函数,允许将csv分配到变量中。但是它不起作用,我也不知道为什么。代码如下:

 file_id <- readline("Type a common word for your files: ")
 file_list <- list.files(pattern = file_id)

 multi.csv <- function(pattern.seq)
  {
    for(i in 1:length(pattern.seq))
       {
          assign(pattern.seq[i], read.csv(pattern.seq[i]))
       }
  }

multi.csv(pattern.seq = file_list)

cat(" Now your .csv files are stored in variables: ", file_list) 
它的工作原理是:变量文件\u 01存储文件\u 01.csv中的数据

你知道它为什么不能在multi.csv函数中工作吗


我完全知道读取许多csv文件的整个问题可以用不同的方式解决,但我想知道这里出了什么问题

这里的问题与范围有关

在R中,每个变量都存储在一个环境中

  • 有一个存储“顶级”变量的全局环境。这有时称为工作区或工作区环境
  • 有包环境(实际上每个包有两个:一个公共包和一个私有包)
  • 您可以使用创建自定义环境
  • 您可以使用将data.frames、列表和现有文件复制到新环境中,但不鼓励这样做
  • 有一些相当模糊且通常不重要的环境,例如空环境和环境
  • 最后,为功能的每次评估创建一个新环境,称为该特定功能的特定评估的评估环境
有关的文档在准确传达哪个环境接收要分配的变量时有点分散,但我将尝试引用所有相关段落:

在哪里做作业。默认情况下,分配到当前环境中。有关其他可能性,请参阅“详细信息”


羡慕使用。请参阅“详细信息”


pos参数可以指定环境,在其中以多种方式分配对象:as-1(默认值),作为正整数(列表中的位置);作为搜索列表中元素的字符串名称;或作为(包括用于访问当前活动的函数调用)。envir参数是指定环境的另一种方式,但主要是为了实现后端兼容性


请注意,指定给附着的列表或数据框会更改附着的副本而不是原始对象:请参见和


如果未指定envir,则分配将在当前活动的环境中进行


如果inherits为TRUE,则搜索所提供环境的封闭环境,直到遇到变量x为止。然后在遇到变量的环境中分配该值(前提是绑定未锁定:请参阅:如果锁定,则发出错误信号)。如果未遇到符号,则在用户的工作区(全局环境)中进行分配

如果inherits为FALSE,则赋值将在envir的初始帧中进行,除非现有绑定已锁定或没有现有绑定且环境已锁定(当发出错误信号时)

由于您没有在
assign()
调用中指定任何
pos
envir
继承
参数,因此变量最终被分配到“当前”环境,即“活动”环境。由于
assign()。当对
multi.csv()
的求值完成时,环境将被销毁,变量也将随之销毁(注意:关闭求值环境可防止其被销毁,但您的代码没有执行任何关闭操作,因此此处不适用)

这也有助于解释为什么对
assign()
的顶级调用有效:因为在这种情况下,“当前”即“活动”环境是全局环境,所以变量正好落在您期望的位置:在您的工作区环境中

您可以通过在
assign()
调用中传递
pos=1L
envir=globalenv()
来解决此问题

(您也可以通过传递
inherits=T
来解决问题,这类似于使用superassignment运算符,但不鼓励这样做。)



有关更多信息,请参阅。

对不起,为什么您需要任何图案?难道你不能循环遍历文件夹中的所有文件,并将内容合并到一个数据集中吗?试试下面的脚本,看看它是否能满足你的需要

setwd("C:/Users/xxx/")

file_list <- list.files()

file_list <- list.files("C:/Users/xxx/")

for (file in file_list){

  # if the merged dataset doesn't exist, create it
  if (!exists("dataset")){
    dataset <- read.table(file, header=TRUE, sep="\t")
  }

  # if the merged dataset does exist, append to it
  if (exists("dataset")){
    temp_dataset <-read.table(file, header=TRUE, sep="\t")
    dataset<-rbind(dataset, temp_dataset)
    rm(temp_dataset)
  }

}
setwd(“C:/Users/xxx/”)
文件列表要求在第一个参数中使用sting文本。不要使用它来扩展列表。另外,您正在使用相同的变量,但没有返回函数。考虑:
dfList
setwd("C:/Users/xxx/")

file_list <- list.files()

file_list <- list.files("C:/Users/xxx/")

for (file in file_list){

  # if the merged dataset doesn't exist, create it
  if (!exists("dataset")){
    dataset <- read.table(file, header=TRUE, sep="\t")
  }

  # if the merged dataset does exist, append to it
  if (exists("dataset")){
    temp_dataset <-read.table(file, header=TRUE, sep="\t")
    dataset<-rbind(dataset, temp_dataset)
    rm(temp_dataset)
  }

}