У меня недавно возникла проблема, когда каждый раз я читал файл csv, содержащий таблицу со значениями, R читал ее как формат списка, а не числовой. Поскольку ни один поток не предоставил мне весь ответ на мою ситуацию, как только я смог его запустить, я решил включить здесь script, который работал у меня в надежде, что он кому-то полезен. Вот оно, с некоторым описанием и некоторыми вариантами в случае необходимости:
(1) Прочитайте данные из файла csv. Здесь у файла нет заголовка, поэтому я помещаю F, если у вас есть заголовок, а затем измените его на T.
data <- read.csv("folder_path/data_file.csv", header=F)
(1.a) Примечание. Если вы получите предупреждение о том, что "неполная конечная строка найдена с помощью readTableHeader", это означает, что R не нашел символ конца файла. Просто добавьте лишнюю пустую строку в конец файла csv, и сообщение не появится снова.
(2) Вы можете проверить, что данные находятся в формате списка (если оно числовое, тогда вы все настроены и вообще не нуждаетесь в этой процедуре!) с помощью команды mode.
mode(data)
(3) Инициализируйте матрицу (как NA), где вы хотите, чтобы данные в числовом формате, используя размеры данных.
dataNum <- matrix(data = NA, nrow = dim(data)[1], ncol = dim(data)[2])
(4) ДОПОЛНИТЕЛЬНО: Если вы хотите добавить имена в свои столбцы и/или строки, вы можете использовать их, если эти параметры.
(4a) Добавить имена в столбцы и строки, предполагая, что каждая из них имеет схожую информацию, другими словами, вы хотите, чтобы имена были col_1, col_2,... и row_1, row_2,...
colnames(dataNum) <- colnames(dataNum, do.NULL = F, prefix = "col_")
rownames(dataNum) <- rownames(dataNum, do.NULL = F, prefix = "row_")
(4b) Если вам нужны разные имена для каждого столбца и каждой строки, используйте этот параметр и добавьте все имена вручную.
colnames(dataNum) <- c("col_name_1", "col_name_2")
rownames(dataNum) <- c("row_name_1", "row_name_2")
(5) Преобразуйте данные из списка в числовую форму и поместите в матричный dataNum.
for (i in 1:dim(data)[2]) {
dataNum[,i] <- c(as.numeric(data[[i]]))
}
(6) Вы можете проверить, что матрица находится в числовом формате с помощью команды режима.
mode(dataNum)
(7) ДОПОЛНИТЕЛЬНО: Если вы хотите перенести матрицу, вы можете использовать следующую команду.
dataNum <- t(dataNum)