将未知变量分配给新变量名称

时间:2013-01-09 10:36:50

标签: r environments

我必须加载许多文件并改变他们的数据。每个文件只包含一个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))

有更好的方法吗?

2 个答案:

答案 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")