#list #r #loops #dataframe
#Список #r #циклы #фрейм данных
Вопрос:
Моя коллега Саманта задала неясный вопрос, поэтому я задаю здесь вопрос. У нее есть переменная goterms
, содержащая все фреймы данных, подлежащие анализу.
goterms <- c('df1','df2','df3')
interestedGO
Переменная содержит для каждого goterm
списка с номерами ILMN. Итак, первый список содержит коды ILMN df1
и так далее.
df1 <- c("ILMN_1665132", "ILMN_1691487", "ILMN_1716446", "ILMN_1769383",
"ILMN_1772387", "ILMN_1783910", "ILMN_1784863")
df2 <- c("ILMN_1651599", "ILMN_1652693", "ILMN_1652825", "ILMN_1653324",
"ILMN_1655595", "ILMN_1656057", "ILMN_1659077", "ILMN_1659923",
"ILMN_1659947", "ILMN_1662322", "ILMN_1662619", "ILMN_1664565",
"ILMN_1665132", "ILMN_1665738", "ILMN_1665859")
df3 <- c("ILMN_1661695", "ILMN_1665132", "ILMN_1716446", "ILMN_1737314",
"ILMN_1772387", "ILMN_1784863", "ILMN_1796094", "ILMN_1800317",
"ILMN_1800512", "ILMN_1807074")
interestedGO <- list(df1,df2,df3)
xx2
Это набор для сравнения. xx2
Переменная содержит подмножество всех возможных чисел ILMN.
xx2 <- c("ILMN_1691487", "ILMN_1716446", "ILMN_1769383","ILMN_1832921")
x
Это своего рода набор ссылок. x
Переменная содержит все возможные номера ILMN.
x <- c("ILMN_1665132", "ILMN_1691487", "ILMN_1716446", "ILMN_1769383", "ILMN_1772387",
"ILMN_1783910", "ILMN_1784863","ILMN_1651599", "ILMN_1652693", "ILMN_1652825",
"ILMN_1653324", "ILMN_1655595","ILMN_1656057", "ILMN_1659077", "ILMN_1659923",
"ILMN_1659947", "ILMN_1662322","ILMN_1662619", "ILMN_1664565", "ILMN_1665132",
"ILMN_1665738", "ILMN_1665859","ILMN_1661695", "ILMN_1665132", "ILMN_1716446",
"ILMN_1737314", "ILMN_1772387","ILMN_1784863", "ILMN_1796094", "ILMN_1800317",
"ILMN_1800512", "ILMN_1807074")
Со всеми этими переменными цель состоит в том, чтобы проверить для каждой из них goterm
соответствующие коды ILMN, находятся ли они в наборе ссылок xx2
. Чтобы проверить это, используется функция сопоставления, и при отсутствии совпадений выдается 0, а совпадающие значения заменяются на 1. Чтобы дать удобный обзор всех goterms
экспериментов, я хочу создать цикл, подобный приведенному ниже, который проверяет, есть ли каждый его ген в наборе ссылок x
. Конечным результатом должен быть a, data.frame
который сравнивает результаты каждого из goterm
в data.frame
.
test <- list()
for (i in 1:length(goterms)) {
goilmn <- as.data.frame(interestedGO[i])
resultILMN <- match(goilmn[,1], xx2, nomatch=0)
resultILMN[resultILMN!=0] <- 1
result <- cbind(goilmn, resultILMN)
colnames(result) <- c('x', 'result')
zz <- merge(result, x, all=TRUE)
zz[is.na(zz)] <- 0
test[[i]] <- matrix(resultloop)
}
Конечный результат будет точно таким:
1 ILMN_1651599 0 0 0
2 ILMN_1652693 0 0 0
3 ILMN_1652825 0 0 0
4 ILMN_1653324 0 0 0
5 ILMN_1655595 0 0 0
6 ILMN_1656057 0 0 0
7 ILMN_1659077 0 0 0
8 ILMN_1659923 0 0 0
9 ILMN_1659947 0 0 0
10 ILMN_1661695 0 0 0
11 ILMN_1662322 0 0 0
12 ILMN_1662619 0 0 0
13 ILMN_1664565 0 0 0
14 ILMN_1665132 0 0 0
15 ILMN_1665132 0 0 0
16 ILMN_1665132 0 0 0
17 ILMN_1665738 0 0 0
18 ILMN_1665859 0 0 0
19 ILMN_1691487 0 0 1
20 ILMN_1716446 1 0 1
21 ILMN_1716446 1 0 1
22 ILMN_1737314 0 0 0
23 ILMN_1769383 0 0 1
24 ILMN_1772387 0 0 0
25 ILMN_1772387 0 0 0
26 ILMN_1783910 0 0 0
27 ILMN_1784863 0 0 0
28 ILMN_1784863 0 0 0
29 ILMN_1796094 0 0 0
30 ILMN_1800317 0 0 0
31 ILMN_1800512 0 0 0
32 ILMN_1807074 0 0 0
Кто-нибудь может мне помочь с этим?
Спасибо!
Ответ №1:
У вас это работает?
data.frame(code=x, sapply(interestedGO, function(curdf){
ifelse(x %in% xx2, x %in% curdf, 0)
}))
Комментарии:
1. 1 Неплохо. Я работал над аналогичным подходом, но ваше решение очень компактное.