我对如何创建一个大矩阵感到有些困惑。我到目前为止的代码如下所示。我想要的是行是位置,列是来自各个文本文件的'beta_values'。
#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)
}
错误:
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)
所以这适用于1个文件。
循环浏览文件:
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