【问题标题】:How to automate read.csv command in R?如何在 R 中自动执行 read.csv 命令?
【发布时间】:2014-07-29 08:33:06
【问题描述】:

我在做一些愚蠢的事情,我无法让 read.csv 写入很多文件。

如果我写:

write.csv(X1, file = "X1.csv")

然后它会写入一个 ~2mb 的 csv 文件,这没关系。我在内存中有大约 2000 个变量,我已经尝试过

for (i in seq_along(fotos)) {
write.csv(paste("X", i, sep = ""), file = paste(paste("X", i, sep = ""),"csv", sep="."))}

我获得了所需的文件,但文件约为 2kb,并且 X1.csv 仅包含一个单元格显示“X1.csv”,并且所有文件都相似,因为 X1000.csv 包含“X1000.csv”,这是不同的命令 write.csv(X1, file = "X1.csv") 创建一个包含 96x96 矩阵的文件 X1.csv。

知道我做错了什么吗?

非常感谢。

【问题讨论】:

  • paste 返回文本,而不是您希望的对象。您可以考虑get,但我会重新考虑整体组织,即至少使用列表而不是自变量并使用矢量化操作而不是for

标签: r


【解决方案1】:

您可以使用函数get 按名称获取对象。但是,将数据帧读入列表比读入通过通用名称相关的对象要好得多。

因此您可以创建数据框列表:

X <- lapply(seq_along(fotos), function(i) get(paste0("X", i)))
names(x) <- fotos

然后写下它们(如果你有一个列表开始,这就是你会使用的):

lapply(names(X), function(name) write.csv(X[[name]], paste(name, 'csv', sep='.')))

【讨论】:

  • write.csv(X[[name]], paste(name, 'csv', sep='.'))?
【解决方案2】:

您可以尝试使用get() 函数

for (i in seq_along(fotos)) {
write.csv(get(paste("X", i, sep = "")), file = paste(paste("X", i, sep = ""),"csv", sep="."))}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    相关资源
    最近更新 更多