Как прочитать матрицу корреляции 3 в виде массива

#r #arrays

#r #массивы

Вопрос:

Я хотел бы прочитать 3 независимые корреляционные матрицы в одном массиве. Однако я следовал указаниям, указанным здесь, получая ошибку и не понимаю, почему. Я был бы признателен, если бы кто-нибудь мог увидеть мой код и помочь мне. Вот мои коды и смоделированные данные.

 dataDir <- getwd()
## Each matrix is in a csv file
set.seed(22)
## m1
li.A <- matrix(rnorm(100), nrow = 20)
rownames(li.A) <- LETTERS[1:20]
colnames(li.A) <- paste0("S_", ncol = 1:5)
m1 <- cor(t(li.A))
write.csv(m1, file = “m1.csv")

# m2
set.seed(42)
pa.A <- matrix(rnorm(100), nrow = 20)
rownames(pa.A) <- LETTERS[1:20]
colnames(pa.A) <- paste0("S_", ncol = 1:5)
m2 <- cor(t(pa.A))
write.csv(m2, file = “m2.csv")

# m3
set.seed(44)
li.B <- matrix(rnorm(100), nrow = 20)
rownames(li.B) <- LETTERS[1:20]
colnames(li.B) <- paste0("S_", ncol = 1:5)
m3 <- cor(t(li.B))
write.csv(m3, file = “m3.csv")

fileList <- dir(path=dataDir,pattern = ".csv")

## Read all matrices into an array
A <- array(as.numeric(NA),dim=c(20,20,3)) # There are 3 matrices of size 20 x 20
for (i in 1:length(fileList)){
  A[,,i] <- as.matrix(read.delim(file.path(dataDir,fileList[i]), sep = ';', header=TRUE, row.names=1))
}

here is the error.
Error in A[, , i] <- as.matrix(read.delim(file.path(dataDir, fileList[i]),  : 
  replacement has length zero
 

Спасибо!

Ответ №1:

Проблема может быть связана с sep = ';' тем, что вместо этого sep="," она возвращает один столбец строки вместо нескольких столбцов. Поэтому, когда мы выполняем присваивание с индексацией, оно показывает ошибку

 A <- array(as.numeric(NA),dim=c(20,20,3)) # There are 3 matrices of size 20 x 20
 for (i in 1:length(fileList)){
   A[,,i] <- as.matrix(read.delim(file.path(dataDir,fileList[i]), 
       sep = ',', header=TRUE, row.names=1))
 }

dim(A)
#[1] 20 20  3