我必须从互联网上下载大量数据,我不希望这些数据过多地挤占我的主目录,所以我喜欢将其移动到/data文件夹。我把这些数据做成一个列表,然后把整个列表移到那个文件夹中。但是,一旦位于文件夹中,我就很难使用sapply()和其他函数对整个文件列表进行分析。我在sapply()中找不到任何参数,它需要一个路径或任何东西,所以我想知道如何解决这个问题。下面是演示这个问题的代码:
library(dplyr)
library(fs)
mtcars %>% write.csv("data_1.csv")
DNase %>% write.csv("data_2.csv")
iris %>% write.csv("data_3.csv")
my_list <- list.files(pattern = "data_")
fs::file_move(my_list, new_path = "MYDIRECTORY/data")
sapply(my_list, read.csv)
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
cannot open file 'data_1.csv': No such file or directory
当您使用sapply
函数时,您可以这样做:
all_data <- sapply(my_list, function(x) {
read.csv(file = paste0("./data/", x))
})
然后,如果你想在一个数据表中添加所有的。csv文件,你可以这样做:
library(data.table)
rbindlist(all_data, fill = TRUE)
您可以通过不使用data.table::fread
来简化,但它速度很快,如果文件夹中有很多文件,则值得保留它。
library(data.table)
library(dplyr)
library(purrr)
path_to_folder = "MYDIRECTORY/data"
df <- list.files(path=path_to_folder,pattern = "*.csv",full.names = T) %>%
map_df(~fread(.,stringsAsFactors=F,check.names=T,strip.white=T))