Конвертировать разделенный пробелами текстовый файл в именованные векторы для вычисления HWE - PullRequest
3 голосов
/ 21 марта 2020

Я имею дело с текстовыми файлами и векторами.

У меня есть текстовый файл с разделением пробелами в следующем формате:

id1 AA 44 AG 20 GG 36
id2 CC 30 CT 22 TT 48
id3 CT 60 CC 30 TT 10
...

И мне нужен код, который проходит по каждой строке и поместите идентификатор в переменную, а остальные значения в векторе. Пример вектора, соответствующего первой строке:

x <- id1
y <- c(AA=40,AG=20,GG=36)

Редактировать: Мне нужно использовать функцию HWChisq из Пакет HardyWeinberg для исключения SNP, которые имеют значение p <0,001. Функция требует именованный вектор количества для каждого аллеля. </p>

Ответы [ 2 ]

2 голосов
/ 21 марта 2020

Если у нас есть альтернативные столбцы (при условии, что у нас есть объект, созданный в R путем чтения файла .csv с read.csv/read.table), то разделите на строку с asplit, исключая первый столбец 'id' столбца, и создайте именованный вектор с setNames

lst1 <- Map(setNames, asplit(df1[-1][c(FALSE, TRUE)], 1), 
         asplit(df1[-1][c(TRUE, FALSE)], 1))
names(lst1) <- df1[[1]]
lst1$id1
# AA AG GG 
# 44 20 36 

data

df1 <- structure(list(id = c("id1", "id2", "id3"), v1 = c("AA", "CC", 
"AA"), v2 = c(44L, 30L, 60L), v3 = c("AG", "CT", "AG"), v4 = c(20L, 
22L, 30L), v5 = c("GG", "TT", "GG"), v6 = c(36L, 48L, 10L)), 
class = "data.frame", row.names = c(NA, 
-3L))
1 голос
/ 22 марта 2020

L oop через строку за строкой, затем примените функцию HWE:

library("HardyWeinberg")

# data
df1 <- read.table(text = "
id1 AA 44 AG 20 GG 36
id2 CC 30 CT 22 TT 48
id3 CT 60 CC 30 TT 10", header = FALSE, stringsAsFactors = FALSE)

out <- apply(df1[, c(3, 5, 7)], 1, function(i){
  x <- HWChisq(setNames(i, c("AA", "AB", "BB")), verbose = FALSE)
  x$pval
})

# [1] 5.774374e-09 1.182236e-07 7.434226e-02

Довольно вывод:

cbind(df1, HWE = out)
#    V1 V2 V3 V4 V5 V6 V7          HWE
# 1 id1 AA 44 AG 20 GG 36 5.774374e-09
# 2 id2 CC 30 CT 22 TT 48 1.182236e-07
# 3 id3 CT 60 CC 30 TT 10 7.434226e-02

Чтобы вычислить HWE для Х-хромосомы см. виньетка:

4. Х-хромосомные тесты для равновесия Харди-Вайнберга

Недавно, Graffelman и Weir (2016) предложили специфические c тесты для HWE для биаллелей c маркеров на X- хромосома. Эти тесты принимают во внимание как мужчин, так и женщин. Х-хромосомные тесты могут быть выполнены с помощью тех же функций, что и в предыдущем разделе ( HWChisq , HWLratio , HWExact , HWPerm ) и добавление аргумента x.linked=TRUE к вызову функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...