#r #matrix #tidyverse #tibble #readr
#r #матрица #tidyverse #тиббл #readr
Вопрос:
Не могли бы вы мне помочь?
Мне часто приходится считывать матрицы инцидентности (AxB) в R
форматированные как TXT файлы. Они выглядят так:
matrix <- matrix(round(runif(50, 0, 100),0), 5, 10)
Мое обычное решение включает базовые read.delim
и as.matrix
:
as.matrix(read.delim("matrix.txt", row.names = 1))
Файл считывается и преобразуется в matrix
класс, поэтому можно выполнить надлежащий анализ.
Тем не менее, я хотел бы иметь возможность читать файл матрицы также с помощью tidyverse read_delim
, поэтому процесс чтения может быть быстрее для больших матриц или большого количества матриц. Я пробовал это:
as.matrix(read_delim("matrix.txt", delim = "/t"))
Но данные скремблируются в очень странном формате, и информация теряется. Есть ли способ считывать и работать с инцидентностью matrices
с помощью инструментов tidyverse?
Спасибо!
Ответ №1:
В R вам нужно использовать обратную косую черту для обозначения специальных и управляющих символов.
Попробуйте
as.matrix(read_delim("matrix.txt", delim = "t"))
read_delim
Функция не имеет опции row.names, поэтому вам придется преобразовать данные, чтобы получить ваши имена строк как имена строк (а не первый столбец). Вы должны сделать это перед преобразованием в matrix.
library(tidyverse)
matrix <- read_delim("matrix.txt", delim = "t") %>%
column_to_rownames(first_column) %>%
as.matrix()
Комментарии:
1. Большое вам спасибо! Это сработало отлично. Тем не менее, есть что-то странное. Я протестировал оба решения, read.delim и read_delim, с помощью microbenchmark, и решение tidyverse оценивается намного медленнее. Разве не должно быть наоборот?
Ответ №2:
попробуйте это
as.matrix(read_delim("matrix.txt", delim = "t", col_names = F))
Комментарии:
1. Спасибо за помощь! Похоже, что результат приближается к формату матрицы, когда col_names = T.