26

私は2つのフォルダーを持っており、folder1それぞれfolder2がまたはのいずれかである約200個のファイルがあり*rdaます*R。2つのディレクトリからすべてのファイルとデータセットを読み取りたい。どうやってやるの?

のパス:

folder1:  C:\folder1
folder2:  C:\folder2 

私の裁判

setwd("C:/folder1")
myls <- ls() # do work as this will only list that are already loaded in the system 
setwd("C:/folder2")
myls2 <- ls()
myls  # do work as this will only list that are already loaded in the system 

これは簡単な質問ですが、答えはありません。

4

3 に答える 3

52

requireと.rdarequiresなので、私は次のようなことをします:load.Rsource

file.sources = list.files(pattern="*.R")
data.sources = list.files(pattern="*.rda")
sapply(data.sources,load,.GlobalEnv)
sapply(file.sources,source,.GlobalEnv)

一度に複数のフォルダから読み取るための更新

file.sources = list.files(c("C:/folder1", "C:/folder2"), 
                          pattern="*.R$", full.names=TRUE, 
                          ignore.case=TRUE)
data.sources = list.files(c("C:/folder1", "C:/folder2"),
                          pattern="*.rda$", full.names=TRUE, 
                          ignore.case=TRUE)
sapply(data.sources,load,.GlobalEnv)
sapply(file.sources,source,.GlobalEnv)

$また、検索パターンの最後での使用に注意してください。これは、たとえば、.R行の終わりでのみ一致することを確認するためのものです。ignore.caseまた、一部のファイルに名前が付けられている場合は、の使用にも注意してscript.rください。

于 2012-04-24T04:38:46.370 に答える
5
for (f in list.files(pattern="*.R")) {
    source(f)
}
for (f in list.files(pattern="*.rda")) {
    load(f)
}
于 2012-04-24T04:06:17.127 に答える
3

tidyverse代わりに使用する場合は、次のmap関数を使用して簡略化できます。

my_path <- c("/path/to/files/")             # set your path
source_files <- list.files(my_path, "*.R$")  # locate all .R files
map(paste0(my_path, source_files), source)  # source all your R scripts!
于 2019-12-02T21:28:21.163 に答える