2013-12-20 43 views
-1

我有一個列表由每個值的名稱數據組成的頻率。名稱是基因座名稱(小數點前)和等位基因數字(小數點後)的組合。我試圖做一系列的計算,如下列:通過名稱自動呼叫值

expD12 <- (1-((Freqs[["D12S391.14"]])^2+(Freqs[["D12S391.15"]])^2+ (Freqs[["D12S391.16"]])^2+ 
(Freqs[["D12S391.17"]])^2+(Freqs[["D12S391.17.1"]])^2+(Freqs[["D12S391.17.3"]])^2+ 
(Freqs[["D12S391.18"]])^2+(Freqs[["D12S391.18.1"]])^2+(Freqs[["D12S391.18.3"]])^2+ 
(Freqs[["D12S391.19"]])^2+(Freqs[["D12S391.19.1"]])^2+(Freqs[["D12S391.19.3"]])^2+ 
(Freqs[["D12S391.20"]])^2+(Freqs[["D12S391.20.1"]])^2+(Freqs[["D12S391.20.3"]])^2+ 
(Freqs[["D12S391.21"]])^2+(Freqs[["D12S391.22"]])^2+(Freqs[["D12S391.22.2"]])^2+ 
(Freqs[["D12S391.23"]])^2+(Freqs[["D12S391.24"]])^2+(Freqs[["D12S391.24.3"]])^2)) 

儘管此代碼做什麼,我需要做的,是有一個更清潔的方式來做到這一點可能涉及一個for循環,並呼籲每個值名稱,直到它達到小數點之前的名稱是不同的?我問這是因爲我必須對多個數據集的多個基因座執行相同的計算。非常感謝!

+0

請提供一個最小可重現的示例。 –

+0

你想使用某個基因名稱的所有等位基因嗎? –

+0

對不起。用於該計算的數據如下: D12S391.19 D12S391.19.1 D12S391.19.3 D12S391.20 0.1515444015 0.0033783784 0.0048262548 0.1264478764 D12S391.20.1 D12S391.20.3 D12S391.21 D12S391.22 0.0009652510 0.0004826255 0.1008687259 0.0661196911 D12S391.22.2 D12S391.23 D12S391.24 D12S391.24.3 0.0004826255 0.0492277992 0.0255791506 0.0004826255 D12S391.25 D12S391.26 D12S391.27 0.0115830116 0.0033783784 0.0024131274 – user3083973

回答

0

如果包含一個可重現的例子,情況會更好;這裏有一個鏡頭在那:

Freqs = list(D12S391.14=.1, D12S391.15=.2, D12S392.14=.3, D12S392.15=.4) 

你可以得到所有的東西,如軌跡名稱:

locuses = unique(unlist(lapply(strsplit(names(Freqs), ".", fixed=TRUE), 
           function(x) x[1]))) 

然後你可以使用函數像斯文列出的計算要用於值每個基因座名稱:

sapply(locuses, function(x) 1 - sum(unlist(Freqs[grepl(x, names(Freqs))])^2)) 
# D12S391 D12S392 
# 0.95 0.75 
0

你可以試試:

locus_name <- "D12S391" 
1 - sum(unlist(Freqs[grepl(locus_name, names(Freqs))])^2) 

此計算將包括所有的等位基因一定locus_name