R 函数读取多个csv
我创建了一个函数,允许将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)) {
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)
}
}