我創建了一個函式,它根據條件clique_function從兩個資料幀中選擇變數object_list并從中回傳一個新的資料幀。clique_listclique_object
輸入:
clique_list是一個 clique 串列(網路中的三個節點的組),其中每列代表一個 clique,其中三個節點組成它。
clique_list <- structure(c("ND1", "IS1", "IS3", "IS1", "IS3", "IS2", "ND2",
"ND1", "IS1"), .Dim = c(3L, 3L))
object_list是一個矩陣,其中節點為行,不同物件型別的出現為列。
object_list <- structure(list(CA1 = c(0.159159159159159, 0.222222222222222,
0.25, 0.115384615384615, 0.311111111111111, 0.1285140562249,
0.214132762312634, 0.413461538461538, 0.183333333333333, 0.4,
0.4375, 0.167778836987607, 0.25, 0.5, 0.166666666666667, 0.181818181818182,
0.21580547112462, 0.0792452830188679, 0.424657534246575, 0, 0
), CA11 = c(0.00600600600600601, 0, 0, 0, 0, 0.00401606425702811,
0.012847965738758, 0, 0.05, 0, 0, 0, 0, 0, 0, 0, 0.00911854103343465,
0.0113207547169811, 0.0410958904109589, 0, 0), CA111 = c(0, 0,
0, 0, 0, 0, 0.00499643112062812, 0, 0.0333333333333333, 0, 0,
0, 0, 0, 0, 0, 0.0060790273556231, 0.00754716981132075, 0.0273972602739726,
0, 0), CA1111 = c(0, 0, 0, 0, 0, 0, 0.000713775874375446, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), CA1113 = c(0, 0, 0, 0,
0, 0, 0.000713775874375446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0), CA1115 = c(0, 0, 0, 0, 0, 0, 0.000713775874375446,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), CA1116 = c(0, 0, 0,
0, 0, 0, 0, 0, 0.0166666666666667, 0, 0, 0, 0, 0, 0, 0, 0.00303951367781155,
0.00377358490566038, 0, 0, 0), CA1117 = c(0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0136986301369863, 0, 0), CA112 = c(0,
0, 0, 0, 0, 0, 0.00285510349750178, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0), CA1122 = c(0, 0, 0, 0, 0, 0, 0.00142755174875089,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), class = "data.frame", row.names = c("ND5",
"ND6", "ND8/ND10", "ND3", "ND7", "ND2", "ND1", "ND4", "KB3/KB4/KB5",
"KB1", "KB2", "IS1", "KB9", "KB7/KB8", "KB6", "IS4", "IS3", "IS2",
"KB12/KB14", "KB13", "IS5"))
該函式clique_function應該回圈object_list并選擇變數type(列),例如CA1來自 的三個節點clique_list。
clique_function <- function(clique_list, type, object_list)
{
for (i in 1:ncol(clique_list)) {
clique_object <- subset(object_list, row.names(object_list) %in% clique_list[, i],
colnames(object_list) == type)
}
return(clique_object)
}
預期輸出clique_object是顯示中所有派系object_list的所選物件型別出現的子集。typeclique_list
舉個例子:
clique_object <- structure(list(cliques = c("ND1", "IS1", "IS3", "ND2", "IS1",
"IS3", "ND1", "IS4", "IS3", "ND1", "IS1", "IS3", "ND1", "IS1",
"IS8", "ND3", "IS1", "IS3", "ND1", "IS1", "IS3"), CA1 = c(0.0007137759,
0.0047664442, 0.009118541, 0.0007137759, 0.0047664442, 0.009118541,
0.0007137759, 0.0047664442, 0.009118541, 0.0007137759, 0.0047664442,
0.009118541, 0.0007137759, 0.0047664442, 0.009118541, 0.0007137759,
0.0047664442, 0.009118541, 0.0007137759, 0.0047664442, 0.009118541
)), class = "data.frame", row.names = c(NA, -21L))
如果不是return(clique_object)我把print(clique_object). 在第一種情況下,我從圍繞資料幀回圈的函式中獲取完整串列。但是return(clique_object)我只得到了第一個集團的結果clique_list。
我希望該函式將完整結果作為資料框輸出。
謝謝你。
uj5u.com熱心網友回復:
如果你改變你的功能是這樣的:
clique_function <- function(clique_list, type, object_list)
{
lapply(seq(1,ncol(clique_list)), function(i) {
subset(object_list, row.names(object_list) %in% clique_list[, i],colnames(object_list) == type)
})
}
然后它將回傳一個資料框串列,如下所示:
[[1]]
CA1
ND1 0.2141328
IS1 0.1677788
IS3 0.2158055
[[2]]
CA1
IS1 0.16777884
IS3 0.21580547
IS2 0.07924528
[[3]]
CA1
ND2 0.1285141
ND1 0.2141328
IS1 0.1677788
然后,您可以選擇如何組合這些框架。例如,您可以像這樣組合它們:
bind_rows(lapply(seq_along(res), function(x) tibble("clique"=x, "nodes"=rownames(res[[x]]), res[[x]])))
# A tibble: 9 x 3
clique nodes CA1
<int> <chr> <dbl>
1 1 ND1 0.214
2 1 IS1 0.168
3 1 IS3 0.216
4 2 IS1 0.168
5 2 IS3 0.216
6 2 IS2 0.0792
7 3 ND2 0.129
8 3 ND1 0.214
9 3 IS1 0.168
但我不知道你想要的輸出結構是什么。在實際實踐中,我會進一步調整clique_function以在一次呼叫中回傳所需的最終結構。
uj5u.com熱心網友回復:
您可以填寫一個clique_object串列并使用rbind將結果放在一起data.frame:
clique_function <- function(clique_list, type, object_list)
{ clique_object <- list()
for (i in 1:ncol(clique_list)) {
clique_object[[i]] <- subset(object_list, row.names(object_list) %in% clique_list[, i],
colnames(object_list) == type)
}
return(do.call(rbind,clique_object))
}
clique_function(clique_list,"CA1",object_list)
CA1
ND1 0.21413276
IS1 0.16777884
IS3 0.21580547
IS11 0.16777884
IS31 0.21580547
IS2 0.07924528
ND2 0.12851406
ND11 0.21413276
IS12 0.16777884
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/429397.html
上一篇:回圈變數以制作許多箱線圖
