2011-07-06 8 views
1

LD()という遺伝学的パッケージの関数を使用しています。単純にするために、基本的に遺伝子型(A/A、A/C、G/Aなど)のリストを取り、値のリスト(D、D '、rなど)を作成します。私は唯一のコアーから値を必要とするので、私はa$rとそれに呼びたいforループを使って行列を埋める

Pairwise LD 
----------- 
        D  D'  Corr 
Estimates: 0.1419402 0.8110866 0.6029553 

       X^2  P-value N 
LD Test: 10.90665 0.0009581958 15 

:結果は以下のように見ていると

a=LD(genotype1,genotype2) 

:それは次のようになります。

私は2つのデータフレームを持っていると私は彼らの直積にその機能を使用する:各カラム(列)は遺伝子型のリストを表して

df1df2は、2つのデータフレームです。私は行列を記入するループのための使用を考えてい :

Error in dim(a1) <- a1.d : 
dims [product "some number"] do not match the length of object ["another number"] 

私は3列と漕い多くを期待している:私はこれを実行すると

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 
    } 
} 

、私はエラーを取得します(df1の列名)であり、第2列は第2の遺伝子型の名前(df2の列名)であり、第3列はLD()関数から得られた値である

から得られた値を有する第1の列

アドバイスはありますか?ありがとう!

UPDATEのANSWER: 私はそれを得るために管理:

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 
    } 
} 
+0

アドバイス1 - 再現可能な例を提供します。 – Chase

+0

私は残念ながら持っていないし、私は見つけることができます。 – Anon

+1

Rセッションに 'df1'と' df2'がありませんか?あなたのコードを試してみるためのデータがないと、あなたが得たエラーをどのように知っていますか?あなたは 'dput(df1)'、 'dput(df2)'、あなたの質問に遭遇したエラーを生成するのに必要な他のデータを追加できますか?あるいは、データのサブセットを与えるか、 'sample'、' letters'、 'rnorm'などのデータを使って十分に代表的な例を生成してください。 – Chase

答えて

1

私はあなたの仕事の最初の部分を理解するのに困難を抱えています。なぜ2つのdata.framesを使いたいのですか?私は通常、個人ごとに1行、マーカーごとに1行のdata.frameを与え、LDは可能なすべてのペアごとの比較を計算します。 しかし、のは、LDパッケージを使用して、あなたに推定LDを想定してみましょう(そう、彼らはそれは時代遅れだと言うが、それはまだ最高です!) 次のように作業を進めることができます。

#extract the correlation r from LD results 
tc<-LD.object$"r" 
#build a three columns matrix with all the pairwise combination of two markers 
pwm<-combn(row.names(tc),2) 
pwld<-matrix(NA,nrow=ncol(pwm),ncol=3) 
pwld[,1:2]<-pwm[1:2,] 
#Fill the matrix 
for(aaa in 1:nrow(pwld)) 
{ 
pwld[aaa,3]<-tc[pwld[aaa,1],pwld[aaa,2]] 
} 
関連する問題