【问题标题】:read.csv() and colClasses [duplicate]read.csv() 和 colClasses [重复]
【发布时间】:2013-02-24 22:05:00
【问题描述】:

我正在尝试使用read.csv() 命令,但我不明白colClasses 部分来运行编码。有没有人解释它是什么,也给我一个简单的read.csv() 编码的例子?

另外,如果我为read.csv() 运行编码,我会收到一个错误

> object of type 'closure' is not subsettable

这是什么类型的错误?上次我运行我的代码时,它起作用了,但现在我明白了。我不确定我应该在这里做些什么改变。这是我的代码:

Precipfiles[1:24] <- list.files(pattern=".csv")
> DF <- NULL
> for (f in Precipfiles[1:24]) {
    data[1:24]<-read.csv(f,header=T,sep="\t",na.string="",colClasses="character")
    DF[1:24]<-rbind(DF,data[1:24])
}

基本上,我会加载所有数据并将它们放在一起,但我无法使用merge() 命令,因为我遇到了上面列出的问题。

我认为我不应该使用colClasses="character",因为我使用的数据都是 200 x 200 矩阵中的数字。我必须将 24 个数据文件放在一起。

如果您对改进此编码有任何建议和建议,请告诉我。 感谢您的所有帮助。

【问题讨论】:

  • 尝试删除所有[1:24]索引
  • 收集有关使用常用函数名称作为变量的 SO 问题会很有趣。 datadf
  • 请不要编辑您的问题,以免改变完整的含义。如果您有新的(后续)问题,请搜索答案,如果找不到,请作为单独的问题发布。

标签: r read.csv


【解决方案1】:

您真的不需要在每个作业中都使用[1:24],这就是导致您的问题的原因。您被分配到某个描述的索引向量的子集。

尝试分配给data[1:24] 时的错误消息,之前没有分配data(在您之前的用法中(您提到的有效),data 可能是您的listdata.frame创建。)。因此data 是一个函数(用于加载与包关联的数据,请参阅?data),而您看到的错误是(函数包含闭包)

我会建议类似的东西

Precipfiles <- list.files(pattern=".csv")
DFlist <- lapply(Precipfiles, read.table, sep = '\t', 
                  na.string = '', header = TRUE)
bigDF <- do.call(rbind, DFlist)

# or, much faster using data.table 
library(data.table)
bigDF <- rbindlist(DFlist)

【讨论】:

  • 从未想过在 data.frames 上使用rbindlist。 +1!
  • mnel,我尝试了你的代码,而且速度快了一些。感谢您的帮助和建议。我想如果没有 [1:24],文件就会变成一个大文件,我无法从一个特定的数据文件中调用一个特定的数字。
  • Ricardo Saporta,为什么我不能在 data.frames 上使用 rbindlist?
猜你喜欢
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 2013-08-19
  • 2012-06-21
  • 2014-12-04
相关资源
最近更新 更多