2013-12-20 41 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