R 在操作列的同时创建大型矩阵
我对如何创建大型矩阵有点困惑。到目前为止,我的代码如下所示。我希望行是位置,列是来自单个文本文件的“beta_值”R 在操作列的同时创建大型矩阵,r,R,我对如何创建大型矩阵有点困惑。到目前为止,我的代码如下所示。我希望行是位置,列是来自单个文本文件的“beta_值” #Number of files = 300 #Matrix 33000 x 300 file.list <- list.files(pattern = "txt$") # for each file, run read.table and select only the 1,2,3,12th column columns = c('ID','S','E','Name','A
#Number of files = 300
#Matrix 33000 x 300
file.list <- list.files(pattern = "txt$")
# for each file, run read.table and select only the 1,2,3,12th column
columns = c('ID','S','E','Name','Alias','version','cdrive','positional','Contour','total_Contour','M_values','beta_values')
#Number of rows in the matrix
nr=33000
mat <- matrix("numeric", nrow = nr, ncol = length(file.list))
for (i in 1:length(file.list)) {
fs <- fread(file.list[i], colClasses = columns, select=c(1,2,4,12))
# Creating Position values given by paste(fs$V1,'_', fs$V2,'_',fs$V4, sep="") and 'beta_values' given by fs$V12
fs_reorder <- data.frame(paste(fs$V1,'_', fs$V2,'_',fs$V4, sep=""), fs$V12)
mat[,i] <- as.matrix(fs_reorder)
}
#文件数=300
#矩阵33000 x 300
file.list您遇到了一些数据类型问题(可能?如果没有看到任何可复制的内容,就很难确定)<代码>矩阵(“数字”,…)
将为每个条目创建一个字符
矩阵,其中包含“数字”
。您使用的columns
向量似乎在指定列的名称,但在fread
的colClasses
参数中使用它。使用paste
时,您创建了一个character
类对象,该对象被data.frame()
强制为factor
。fs\u reorder
似乎是一个两列数据框,其中第一列是factor
,第二列是fs$V12
所属的任何类,但随后将其转换为一个(2列)矩阵,并尝试将其压缩为一列mat
。此外,还不清楚for循环迭代是否有效,或者问题是否只存在于其中一列。(for循环中的print(i)
行可以帮助您跟踪它的进度以找出问题。)有太多潜在的bug,我猜它们都不起作用。摆脱for
循环,用i逐行检查代码。如果你需要额外的帮助,你需要,最好是最小的,比如说,一个5行测试文件,而不是(大概)33k行测试文件。所以我接受了你的建议,上面列出的更改-请注意-
Error in mat[, i] <- as.matrix(fs_reorder) :
number of items to replace is not a multiple of replacement length
> i=1
> fs <- fread(file.list[i], select=c(1,2,4,12))
> mat <- matrix(nrow = nr, ncol = length(file.list))
> fs_reorder <- data.frame(paste(fs$V1,'_', fs$V2,'_',fs$V4, sep=""), fs$V12)
> mat[,i] <- as.matrix(fs_reorder)
Error in mat[, i] <- as.matrix(fs_reorder) :
number of items to replace is not a multiple of replacement length
> mat<- as.matrix(fs_reorder)
file.list_main <- list.files(pattern = "txt$")
file.list = file.list_main[1:2]
n = length(position_mat)
k = length(file.list)
mat <- matrix(nrow=n, ncol=length(file.list))
for (i in 1:length(file.list)) {
fs <- fread(file.list[i], select=c(1,2,4,12))
fs_reorder <- data.frame(paste(fs$V1,'_', fs$V2,'_',fs$V4, sep=""), fs$V12)
positions = (paste(fs$V1,'_', fs$V2,'_',fs$V4, sep=""))
betas = fs$V12
for(j in 1:k){
for(i in 1:n){
mat[i,j] = (positions[i]*betas[j])
}
}
}
Error:
Error in positions[i] * betas[j] :
non-numeric argument to binary operator
set.seed(20430)
n = 1000
k = 3
fileA = rnorm(n)
fileB = rnorm(n)
fileC = rnorm(n)
positions = paste("loveletters_",rnorm(n),sep="")
betas <- cbind(fileA, fileB, fileC)
for(j in 1:k){
for(i in 1:n){
x[i,j] = (positions[i]*betas[j])
}
}
Results:
Error in positions[i] * betas[j] :
non-numeric argument to binary operator
> length(positions)
[1] 1000
> ncol(betas)
[1] 3
> nrow(betas)
[1] 1000