我必须加载许多文件并改变他们的数据。每个文件只包含一个data.table
,但表中有各种名称。
我想在所有文件上运行一个脚本 - 为此,我必须将未知data.table
分配给一个通用名称...说blob
。
R
这样做的方法是什么?目前,我最好的猜测(看起来像是黑客,但有效)是将data.table
加载到新环境中,然后加载:assign('blob', get(objects(envir=newEnv)[1], env=newEnv)
。
在可重现的背景下,这是:
newEnv <- new.env()
assign('a', 1:10, envir = newEnv)
assign('blob', get(objects(envir=newEnv)[1], env=newEnv))
有更好的方法吗?
答案 0 :(得分:5)
R方式是创建单个对象,即单个数据表列表。
这是一些包含三个步骤的伪代码:
list.files()
创建文件夹中所有文件的列表。lapply()
和read.csv()
来读取文件并创建数据框列表。将read.csv()
替换为read.table()
或适用于您的数据的任何内容。lapply()
,这次使用as.data.table()
将数据框转换为数据表。伪代码:
filenames <- list.files("path/to/files")
dat <- lapply(files, read.csv)
dat <- lapply(dat, as.data.table)
您的结果应该是一个名为dat
的列表,其中包含每个原始文件的数据表。
答案 1 :(得分:2)
我假设您使用save()
保存了data.tables,如下所示:
d1 <- data.table(value=1:10)
save(d1, file="data1.rdata")
并且您的问题是,当您加载文件时,您不知道保存文件时使用的名称(此处:d1)。正确的吗?
我建议您使用saveRDS()
和readRDS()
来保存/加载单个对象:
d1 <- data.table(value=1:10)
saveRDS(d1, file="data1.rds")
blob <- readRDS("data1.rds")