Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在“data.table::fread”中同时使用col.name和colclass?_R_Csv_Data.table - Fatal编程技术网

如何在“data.table::fread”中同时使用col.name和colclass?

如何在“data.table::fread”中同时使用col.name和colclass?,r,csv,data.table,R,Csv,Data.table,作为一个简单的例子,我写的cars没有列名 data.table::fwrite(cars,“cars.csv”,col.names=FALSE) 然后我尝试用列名和指定列a data.table::fread(“cars.csv”,col.names=c(“a”,“b”), colClasses=list(a=“numeric”)) 我得到了这个错误 data.table::fread(“cars.csv”,col.names=c(“a”,“b”), colClasses=list(a=“

作为一个简单的例子,我写的
cars
没有列名

data.table::fwrite(cars,“cars.csv”,col.names=FALSE)
然后我尝试用列名和指定列
a

data.table::fread(“cars.csv”,col.names=c(“a”,“b”),
colClasses=list(a=“numeric”))
我得到了这个错误

data.table::fread(“cars.csv”,col.names=c(“a”,“b”), colClasses=list(a=“numeric”):中的列名“numeric” 找不到colClasses[[1]]


一种可能的解决方案是使用列的索引,而不是名称

data.table::fread("cars.csv", col.names = c("a","b"), colClasses = list(numeric = 1))

似乎
data.table
col.names
之前处理
colClasses
参数。因此,除了另一个答案提供的解决方法外,还有两种替代方法:

# option1: A character vector of classes
fread("cars.csv", colClasses = c(V1 = "numeric"), col.names = c("a","b"))

# option2: Or a named list of vectors of column names or numbers
fread("cars.csv", colClasses = list(numeric = "V1"), col.names = c("a","b"))

这里,
V1
是自动检测第一列的名称。

似乎是唯一的方法,但从用户的角度来看很糟糕。此解决方案仅适用于没有列名称的数据,而“变通方法”也适用于具有列名称的数据。我不认为“V1”比使用1有什么改进,因为在这两种情况下,您都需要知道列的位置。@kath,我想说的主要一点是解释为什么会发生这种错误。data.table首先解析colClasses参数以读取数据,然后设置col.name。一旦我们知道原因,我们就知道如何解决问题。这两种方法都是次要的。我同意你的回答更优雅。“V1”是自动断开的。如果数据有标题,我们可以用标题中相应的值替换“V1”。