1

我必须加载许多文件并转换它们的数据。每个文件只包含一个data.table,但表有不同的名称。

我想对所有文件运行一个脚本——为此,我必须将未知数分配data.table给一个通用名称……比如说blob

这样做的R方法是什么?目前,我最好的猜测(这似乎是一个 hack,但有效)是将 加载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))

有没有更好的办法?

4

2 回答 2

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,其中包含每个原始文件的数据表。

于 2013-01-09T10:53:02.827 回答
2

我假设您使用以下方式保存了 data.tables save()

d1 <- data.table(value=1:10)
save(d1, file="data1.rdata")

您的问题是,当您加载文件时,您不知道保存文件时使用的名称(此处为:d1)。正确的?

我建议您改用saveRDS()andreadRDS()来保存/加载单个对象:

d1 <- data.table(value=1:10)
saveRDS(d1, file="data1.rds")
blob <- readRDS("data1.rds")
于 2013-01-09T13:10:52.550 回答