Я использую функцию из пакета генетики под названием LD()
.Чтобы упростить то, что он делает, он по существу берет список генотипов (A / A, A / C, G / A и т. Д.) И создает список значений (D, D ', r и т. Д.).Это выглядит примерно так:
a=LD(genotype1,genotype2)
с результатами, похожими на:
Pairwise LD
-----------
D D' Corr
Estimates: 0.1419402 0.8110866 0.6029553
X^2 P-value N
LD Test: 10.90665 0.0009581958 15
Мне нужны только значения из Corr, поэтому я вызову его с помощью a$r
.
У меня есть 2 фрейма данных, и я хочу использовать эту функцию для их декартового произведения:
df1
и df2
- это 2 фрейма данных, каждый столбец (столбец) представляет список генотипов,Я думаю об использовании цикла for для заполнения матрицы:
df1=data.frame(c("A/A","C/C","A/A"),c("G/G","T/T","T/T"))
df2=data.frame(c("A/T","C/T","C/C"),c("A/A","A/T","G/G"))
q=1 # acts as a counter
n=length(df1$col1) # All lists are the same length
k=length(df2$col2) # These are to set the dimensions of the matrix
r=n*k
m=matrix(data=NA, nrow=r, ncol=3, byrow=TRUE, dimnames=list(NULL, c("c14","c19","Link")))
for(i in (1:n))
{
for(j in (1:k))
{
geno1=genotype(df2)[j] #genotype is a function that must be applied to the
geno2=genotype(df1)[i] #lists before the LD() function can be used
d=LD(geno1,geno2)
m=d$r #I only need the values from this section of the output
ld[q,]=c(names(df1),names(df2),m) #This is supposed to fill out the matrix
#I'm also not sure of how to do that part
q=q+1 #this is so that the above line fills in the next row with each iteration
}
}
Когда я запускаю это, я получаю ошибку:
Error in dim(a1) <- a1.d :
dims [product "some number"] do not match the length of object ["another number"]
Я ожидаю 3 столбцаи множество строк строки с первым столбцом, являющимся именем первого генотипа (имена столбцов df1), второй столбец является именем второго генотипа (имена столбцов df2), а третий столбец со значениями, полученными из LD()
функция
Есть совет?Спасибо!
ОБНОВЛЕНИЕ ОТВЕТ: Мне удалось его получить:
q=1 # acts as a counter
n=length(t1$rs.)
k=length(t2$rs.)
r=n*k
ld=matrix(data=NA, nrow=r, ncol=3, byrow=TRUE, dimnames=list(NULL, c("c14","c19","Link")))
for(i in (1:n))
{
for(j in (1:k))
{
deq=LD(genotype(g1[,i]),genotype(g2[,j]))
m=deq$r
ld[q,]=c(i,j,m)
q=q+1
}
}