在操纵列时创建大矩阵

时间:2017-05-12 17:27:15

标签: r

我对如何创建一个大矩阵感到有些困惑。我到目前为止的代码如下所示。我想要的是行是位置,列是来自各个文本文件的'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

0 个答案:

没有答案