Как прочитать матрицу в R с помощью инструментов tidyverse?

#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.