rbind具有不同行长的文本文件

rbind具有不同行长的文本文件,r,R,我正在尝试使用dif.length行数来绑定两个txt文件,例如: 我使用以下代码: a<-matrix(1:12,4,3) b<-matrix(21:41,7,3) setwd("test/") write.table(a, file="a.txt",quote=FALSE, row.names=FALSE,col.names=FALSE) write.table(b, file="b.txt",quote=FALSE, row.names=FALSE, col.names=F

我正在尝试使用dif.length行数来绑定两个txt文件,例如:

我使用以下代码:

a<-matrix(1:12,4,3)
b<-matrix(21:41,7,3)

setwd("test/")
write.table(a, file="a.txt",quote=FALSE,  row.names=FALSE,col.names=FALSE)
write.table(b, file="b.txt",quote=FALSE, row.names=FALSE, col.names=FALSE)
file_list <- list.files()
g<- do.call(rbind,lapply(file_list,FUN=function(files){scan(files,what = character())}))
我是新手,有什么解决办法吗?
非常感谢,

我不喜欢扫描,不过,我相信它在某些情况下可以发挥作用

因此,我建议使用read.csv和write.csv执行以下操作:

a<-matrix(1:12,4,3)
b<-matrix(21:41,7,3)

setwd("test/")
write.csv(a, file="a.txt",row.names=FALSE,col.names=FALSE)
write.csv(b, file="b.txt", row.names=FALSE, col.names=FALSE)
file_list <- list.files()
g <- do.call(rbind,lapply(file_list,FUN=function(files){read.csv(files)}))

除非您另有说明,
scan()
将作为单个原子向量读取整个文件。您可以将列表传递给
what
参数,但使用读取结构化数据的函数更容易、更安全。另外,您不想使用
what=character()
,因为您正在读取数值

base R中的
read.table()
,以及包“data.table”中的
fread()
可以相当容易地完成这项工作

files <- c("a.txt", "b.txt")

## read.table()
data.matrix(do.call(rbind, lapply(files, read.table)), rownames.force = FALSE)

## fread()
library(data.table)
data.matrix(rbindlist(lapply(files, fread)))
如果确实想使用
scan()
,可以将列表传递给
what
参数,告诉它列数

## get number of columns
nc <- max(unlist(lapply(files, count.fields)))
## read as a list, then bind together
do.call(rbind, lapply(files, function(x) {
    do.call(cbind, scan(x, what = as.list(double(nc)), quiet = TRUE))
}))
#       [,1] [,2] [,3]
#  [1,]    1    5    9
#  [2,]    2    6   10 
#  [3,]    3    7   11
#  [4,]    4    8   12
#  [5,]   21   28   35
#  [6,]   22   29   36
#  [7,]   23   30   37
#  [8,]   24   31   38
#  [9,]   25   32   39
# [10,]   26   33   40
# [11,]   27   34   41
##获取列数

nc你不应该探究为什么你会出现这个错误,而不是想要一个暴力解决方案,尤其是因为你是r的新手?我已经探索了一个解决方案,但我没有解决这个问题。对于一个新手来说,你的第一篇文章比我当时的好得多。我不确定你的意思,但似乎rbind(a,b)生成上面的输出。
rbind.fill
从plyr软件包可能会起作用。我找到了此链接,但我仍然有相同的问题。感谢您的评论RawrTanks DJJ供您尝试。这给出了相同的警告。关于扫描,您是对的。它在一行中读取表。如果我有一个矩阵,我将用:1抱歉,在代码。现在它应该工作得更好。
files <- c("a.txt", "b.txt")

## read.table()
data.matrix(do.call(rbind, lapply(files, read.table)), rownames.force = FALSE)

## fread()
library(data.table)
data.matrix(rbindlist(lapply(files, fread)))
#       V1 V2 V3
#  [1,]  1  5  9
#  [2,]  2  6 10
#  [3,]  3  7 11
#  [4,]  4  8 12
#  [5,] 21 28 35
#  [6,] 22 29 36
#  [7,] 23 30 37
#  [8,] 24 31 38
#  [9,] 25 32 39
# [10,] 26 33 40
# [11,] 27 34 41
## get number of columns
nc <- max(unlist(lapply(files, count.fields)))
## read as a list, then bind together
do.call(rbind, lapply(files, function(x) {
    do.call(cbind, scan(x, what = as.list(double(nc)), quiet = TRUE))
}))
#       [,1] [,2] [,3]
#  [1,]    1    5    9
#  [2,]    2    6   10 
#  [3,]    3    7   11
#  [4,]    4    8   12
#  [5,]   21   28   35
#  [6,]   22   29   36
#  [7,]   23   30   37
#  [8,]   24   31   38
#  [9,]   25   32   39
# [10,]   26   33   40
# [11,]   27   34   41