R 导入多个文件

R 导入多个文件,r,R,我有大约三十个文件夹,每个文件夹中都有许多文件,每个文件都包含不同信息的矩阵。我需要能够导入这些文件,以便我可以做一个矩阵的图像打印。我知道如何进行图像打印,但我不知道如何获取所有文件。有没有办法循环浏览每个文件夹并从每个文件夹中获取我需要的单个文件?这是每年的气象数据。所以我有每年一次的文件夹,每个文件夹都包含相同的变量。我需要一个循环,可以从2005年的文件夹拉温度文件,然后从2006年的文件夹拉温度文件,依此类推。这可以通过for循环或apply实现吗 查看?list.dirs和相关功能l

我有大约三十个文件夹,每个文件夹中都有许多文件,每个文件都包含不同信息的矩阵。我需要能够导入这些文件,以便我可以做一个矩阵的图像打印。我知道如何进行图像打印,但我不知道如何获取所有文件。有没有办法循环浏览每个文件夹并从每个文件夹中获取我需要的单个文件?这是每年的气象数据。所以我有每年一次的文件夹,每个文件夹都包含相同的变量。我需要一个循环,可以从2005年的文件夹拉温度文件,然后从2006年的文件夹拉温度文件,依此类推。这可以通过for循环或apply实现吗

查看
?list.dirs
和相关功能
list.files
(两者都记录在同一帮助页中。)

首先列出目录,例如:

> (dirs <- list.dirs("~/foo", recursive = FALSE))
[1] "/home/gavin/foo/bar1" "/home/gavin/foo/bar2"
fs
现在看起来像这样:

> str(fs)
List of 2
 $ :List of 3
  ..$ : num [1:5, 1:5] -1.65 -2.47 1.27 0.14 -0.22 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
  ..$ : num [1:5, 1:5] 0.417 0.186 -2.452 -0.695 -1.216 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
  ..$ : num [1:5, 1:5] 1.41924 -1.96918 0.38819 -0.41437 0.00718 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
 $ :List of 3
  ..$ : num [1:5, 1:5] -1.791 0.805 0.302 -0.383 -0.793 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
  ..$ : num [1:5, 1:5] 0.305 0.353 -0.342 0.515 -0.375 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
  ..$ : num [1:5, 1:5] -0.634 -0.776 0.517 -0.845 0.83 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
我还没有完全弄清楚如何让
rappy()
在这里工作,但是

lapply(fs, function(x) lapply(x, image))

将在两个列表中分别绘制3个矩阵。

查看
?list.dirs
和相关函数
list.files
(两者都记录在同一帮助页中。)

首先列出目录,例如:

> (dirs <- list.dirs("~/foo", recursive = FALSE))
[1] "/home/gavin/foo/bar1" "/home/gavin/foo/bar2"
fs
现在看起来像这样:

> str(fs)
List of 2
 $ :List of 3
  ..$ : num [1:5, 1:5] -1.65 -2.47 1.27 0.14 -0.22 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
  ..$ : num [1:5, 1:5] 0.417 0.186 -2.452 -0.695 -1.216 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
  ..$ : num [1:5, 1:5] 1.41924 -1.96918 0.38819 -0.41437 0.00718 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
 $ :List of 3
  ..$ : num [1:5, 1:5] -1.791 0.805 0.302 -0.383 -0.793 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
  ..$ : num [1:5, 1:5] 0.305 0.353 -0.342 0.515 -0.375 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
  ..$ : num [1:5, 1:5] -0.634 -0.776 0.517 -0.845 0.83 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:5] "1" "2" "3" "4" ...
  .. .. ..$ : chr [1:5] "V1" "V2" "V3" "V4" ...
我还没有完全弄清楚如何让
rappy()
在这里工作,但是

lapply(fs, function(x) lapply(x, image))
将在两个列表中分别绘制3个矩阵。

在windows上:

假设您在
D:/data
中有年度文件夹,并且每个文件夹都有文件名
temperature.csv

# set the main working directory
setwd("D:/data")

# allocate a list for temperature matrices
list.temp.matrix = vector("list",length(list.dirs(recursive=FALSE)))

# iterate through each folder and load the file
i <- 1
for (dir.name in list.dirs(recursive=FALSE))
{
    file.name <- paste0(dir.name, "/temperature.csv")
    temp.matrix <- as.matrix(read.csv(file.name))

    # update the list
    list.temp.matrix[[i]] <- temp.matrix
    i <- i + 1

    # to avoid over-writing plots
    x11()                                       
    image(temp.matrix)
}
#设置主工作目录
setwd(“D:/data”)
#为温度矩阵分配一个列表
list.temp.matrix=vector(“list”,长度(list.dirs(recursive=FALSE)))
#遍历每个文件夹并加载文件
i在windows上:

假设您在
D:/data
中有年度文件夹,并且每个文件夹都有文件名
temperature.csv

# set the main working directory
setwd("D:/data")

# allocate a list for temperature matrices
list.temp.matrix = vector("list",length(list.dirs(recursive=FALSE)))

# iterate through each folder and load the file
i <- 1
for (dir.name in list.dirs(recursive=FALSE))
{
    file.name <- paste0(dir.name, "/temperature.csv")
    temp.matrix <- as.matrix(read.csv(file.name))

    # update the list
    list.temp.matrix[[i]] <- temp.matrix
    i <- i + 1

    # to avoid over-writing plots
    x11()                                       
    image(temp.matrix)
}
#设置主工作目录
setwd(“D:/data”)
#为温度矩阵分配一个列表
list.temp.matrix=vector(“list”,长度(list.dirs(recursive=FALSE)))
#遍历每个文件夹并加载文件

i如果您希望将所有文件作为数据帧读取到当前会话中,您可以这样做。我制作了一个临时目录,名为temp

> getwd()
[1] "/Users/homedir/tmp"
它有3个目录,其中包含不同年份的数据

> dir()
[1] "data2005" "data2006" "data2007"
其中保存了一些文件(就本例而言,它们是相同的)

> ddfwind <- data.frame(x=runif(10), y=runif(10))
> ddfsun <- data.frame(x=runif(10), y=runif(10))
在一个新的R会话中,我转到目录tmp,从所有目录中获得了名称中包含wind的所有文件

> fn.windData <- dir(pattern="wind.dat$", recursive=TRUE)

如果您希望将所有文件作为数据帧读取到当前会话中,您可以这样做

> getwd()
[1] "/Users/homedir/tmp"
它有3个目录,其中包含不同年份的数据

> dir()
[1] "data2005" "data2006" "data2007"
其中保存了一些文件(就本例而言,它们是相同的)

> ddfwind <- data.frame(x=runif(10), y=runif(10))
> ddfsun <- data.frame(x=runif(10), y=runif(10))
在一个新的R会话中,我转到目录tmp,从所有目录中获得了名称中包含wind的所有文件

> fn.windData <- dir(pattern="wind.dat$", recursive=TRUE)

你能显示文件夹和其中文件名的格式吗?(它们是类似于
temp2005
temp2006
之类的吗?)文件夹2005152、2005182、2005312、2006152、2006182等。这些文件夹代表一年中的三个月。每个文件夹中需要的文件名为Cirrus_Reflective--u Mean_Daily.mat我知道如何导入。mat文件能否显示文件夹名称和其中文件的格式?(它们是不是像
temp2005
temp2006
,或者别的什么?)文件夹2005152、2005182、2005312、2006152、2006182等等。它们是表示一年中三个月的文件夹。每个文件夹中需要的文件名为Cirrus_Reflective--u Mean_Daily.mat我知道如何导入.mat文件
setwd()
?我指的是无处不在(适用于Windows上的目录路径).Done。由于某种原因,当我从explorer复制时,我得到了这个\,因此我习惯于添加另一个\,而不是将其替换为
/
,这可能最终会咬到你。当你将文本传递到一个shell时,这个shell会将文本传递到另一个shell。你最终会陷入越狱。这很有效,但我只得到一个矩阵。对此我深表歉意在我的原始问题中没有具体说明。每个文件夹中的每个文件都是一个10x10矩阵。我需要获取每个矩阵并将它们放入一个数组中。你是说在
setwd()
?我是说无处不在(用于Windows上的目录路径).Done。由于某种原因,当我从explorer复制时,我得到了这个\,因此我习惯于添加另一个\,而不是将其替换为
/
,这可能最终会咬到你。当你将文本传递到一个shell时,这个shell会将文本传递到另一个shell。你最终会陷入越狱。这很有效,但我只得到一个矩阵。对此我深表歉意在我的原始问题中没有具体说明。每个文件夹中的每个文件都是一个10x10矩阵。我需要获取每个矩阵并将它们放入一个数组中。如果每个文件是一个10 x 10的矩阵,我将如何将它们放入一个数组中。使用您的示例,我将如何将每个文件1.csv放入一个矩阵中。这非常有效,但它列出了每个矩阵。@user2113499请你开始一个新问题好吗?这就是新问题所在。我想出来了!这很有帮助。谢谢。如果每个文件都是一个10乘10的矩阵,我该如何将它们放入一个数组中。以你的例子,我该如何将每个文件1.csv放入一个矩阵中。这很好,但它列出了每个单独的矩阵。@user2113499请给我一个新问题好吗?这就是新问题所在。我想出来了!这很有帮助。谢谢。