С:
read.table(file="line.txt", na.strings = "-",
header=TRUE, stringsAsFactors=FALSE, fill=TRUE)
где "line.txt" имя, которое вы дали вашему табуляцией текстовый файл.
Использование fill=TRUE
для обеспечения неполных линий, от ?read.table
:
заполнить логический. Если TRUE, то в случае, если строки имеют неодинаковую длину, пустые поля неявно добавляется
na.strings персонаж вектор строк, которые должны быть интерпретированы в качестве значений NA. Пустые поля также считаются отсутствующими значениями в логических, целочисленных, числовых и сложных полях.
Чтобы использовать ввод пробы, вместо того, чтобы использовать file="line.txt"
, я просто делаю:
x <-
read.table(text='
position SNP rs11828013 rs7931369 rs567411332 rs184532784 rs7931583 rs555937772 rs9651750 rs9651751 rs9651752 rs73530502
71278426 rs11828013 rs11828013
71278461 rs7931369 - rs7931369
71278482 rs567411332 - - rs567411332
71278519 rs184532784 - - - rs184532784
71278580 rs7931583 - 1.000 - - rs7931583
71278733 rs555937772 - - - - - rs555937772
71278792 rs9651750 - 1.000 - - 1.000 - rs9651750
71278828 rs9651751 - 1.000 - - 1.000 - 1.000 rs9651751
71278915 rs9651752 - 1.000 - - 1.000 - 1.000 1.000 rs9651752
71279052 rs73530502 - 0.116 - - 0.116 - 0.116 0.116 0.116 rs73530502
',na.strings='-', header=TRUE, stringsAsFactors = FALSE, fill=TRUE)
Чтобы превратить это обратно в нижнюю треугольную матрицу, вы можете сделать:
x[,1] <- NULL
rownames <- x[,1]
x <- sapply(x[,-1], as.numeric)
rownames(x) <- rownames
x
, которая возвращает матрицу:
rs11828013 rs7931369 rs567411332 rs184532784 rs7931583 rs555937772 rs9651750 rs9651751 rs9651752 rs73530502
rs11828013 NA NA NA NA NA NA NA NA NA NA
rs7931369 NA NA NA NA NA NA NA NA NA NA
rs567411332 NA NA NA NA NA NA NA NA NA NA
rs184532784 NA NA NA NA NA NA NA NA NA NA
rs7931583 NA 1.000 NA NA NA NA NA NA NA NA
rs555937772 NA NA NA NA NA NA NA NA NA NA
rs9651750 NA 1.000 NA NA 1.000 NA NA NA NA NA
rs9651751 NA 1.000 NA NA 1.000 NA 1.000 NA NA NA
rs9651752 NA 1.000 NA NA 1.000 NA 1.000 1.000 NA NA
rs73530502 NA 0.116 NA NA 0.116 NA 0.116 0.116 0.116 NA
Использовать read.delim? Трудно отлаживать, не видя, как выглядят ваши исходные данные. – Heroka
Я не знаю, что любой мог бы дать разумный ответ на этот вопрос, не зная, как вы хотите обрабатывать разницу в количестве столбцов между строками. – Benjamin
Кроме того, если вы действительно этого хотели, вы могли бы написать некоторый вариант цикла, который бы использовал 'read.table' с аргументами' skip' и 'nrows' для чтения одной строки за раз и хранения каждого результата в элементе списка. Но опять же, что вы там делаете? – Benjamin