在这种情况下,如何在 R 中使用扫描读取大文件(带有行名)



>我有一个文本文件,它是一个 1000 行 * 40001 列表。

文件的第一列是一个字符串,其他列是一些float数字,如下所示:

A 2 3 4.54 .... 11.23
B 6 6 7 ....    23.45

我想将此文件读入 matice read.table但对于大文件似乎不是很有效,所以我认为scan可能是正确的工具?

但是,默认情况下,scan只能接受数字作为输入。如果我想输入非数字,我需要更改 what 参数。但是由于有 40000+ 列,我无法为每个输入分配输入类型。

有谁知道如何使用它?谢谢!

您可以使用

what 参数并指定类型列表(如 colClasses )。

Lines <-
"A 2 3 4.54 11.23
B 6 6 7 23.45"
Data <- (scan(textConnection(Lines), what=c(list(NULL), rep(0,4))))
(Data <- do.call(cbind, Data))
#      [,1] [,2] [,3]  [,4]
# [1,]    2    3 4.54 11.23
# [2,]    6    6 7.00 23.45

如果使用 colClasses 参数,read.table 函数将变得更加高效:

inp <- read.table(filnam, colClasses= c(NULL, rep("numeric", 40000) )

最新更新