2017-05-24 5 views
1

長いネストされたforループのp値をデータフレームの空の列に格納しようとしています。コードの近くでサンプルを検索しようとしましたが、他のforループに適用できるものと同じものを私のものに適用することができないように、コードが実際には長くて(そしてたぶん間違っているように)感じます。長いネストされたforループの結果をデータフレーム内の空の列に格納する方法R

私がしようとしていることの概要は、観察された対の鳥の関連性を、p値を見つけることによって、特定の年のすべての可能な対の鳥の関連性と比較しようとしています。これを行うには、私は巨大なデータセットから何年もの範囲を選択しているforループを書いています。そして、私は観測されたデータを絞り込むために何年もの関数を適用しています関連性のための列を追加し、そのペアの関連性値を別のデータセットから転送します。私は、この中に別のループ関数を適用して、その年のすべての可能な対の鳥を持つデータフレームを作成し、ペアの関連性値の列を追加して転送します。これらの2つのデータフレームのフレームと各年の関連性から、wilcoxテストを適用して各年のp値を求めたいと思います。私はこれらのp値を、私が年の列とpの値の列で作成した別のデータフレームに転送したいと思います。ここで

は私(クレイジー見て)コードです:

`year <- c(2000:2013) 
pvalue <- c(NA) 
results <- data.frame(year, pvalue) 
for(j in c(2000:2013)) { 
    allbr_demo_noEPP_year <- subset(allbr_demo_noEPP, Year == j) 
    allbr_demo_noEPP_year_geno_obs <- allbr_demo_noEPP_year[allbr_demo_noEPP_year$Pairs %in% c(genome$pair1,genome$pair2),] 
    allbr_demo_noEPP_year_geno_obs$relatedness <- laply(allbr_demo_noEPP_year_geno_obs$Pairs, function(x) genome[genome$pair1==x|genome$pair2==x,'PI_HAT']) 
    allbr_demo_noEPP_year_geno <- allbr_demo_noEPP_year[c(allbr_demo_noEPP_year$MB_USFWS,allbr_demo_noEPP_year$FB_USFWS) %in% genotyped$V2,] 
    breeder_list_males <- allbr_demo_noEPP_year_geno_obs[,8] 
    breeder_list_females <- allbr_demo_noEPP_year_geno_obs[,10] 
    unq_breeder_list_males <- unique(breeder_list_males) 
    unq_breeder_list_females <- unique(breeder_list_females) 
    all_poss_combo <-list() 
    for(i in unq_breeder_list_males){ 
    print(i) 
    all_poss_combo[[i]]<-paste0(i, ",", unq_breeder_list_females)} 
    lapply(X = all_poss_combo, FUN= function(x) length(unique(x))) 
    all_poss_df<-unlist(all_poss_combo, use.names = F) 
    all_poss_df <- data.frame("combo"=all_poss_df, "M"=NA, "F"=NA) 
    all_poss_df$M <- substr(all_poss_df$combo, start = 1, stop = 10) 
    all_poss_df$F <- substr(all_poss_df$combo, start = 12, stop = 22) 
    all_poss_df_geno <- all_poss_df[all_poss_df$combo %in% c(genome$pair1,genome$pair2),] 
    all_poss_df_geno$relatedness <- laply(all_poss_df_geno$combo, function(x) genome[genome$pair1==x|genome$pair2==x,'PI_HAT']) 
    wilcox.test(allbr_demo_noEPP_year_geno_obs$relatedness, all_poss_df_geno$relatedness, alternative='greater')}` 

正直に言うと、私はこれはループのために働く場合にもわからないんだけど(それは私にはかなり複雑なようだが、私は初心者です)しかし、私はこのような状況のためにforループを実行すると効果があると言われました。おそらく私がやろうとしていることをやるより簡単で速い方法があることを理解していますが、私も歓迎しますが、ループのためにこれを修正できる方法を見てみたいと思います。データフレームに変換する。

ご協力いただきありがとうございます!

+0

あなたが部分を掲示する気だろうあなたのコードを実行できるように、あなたのデータセットの?データのサブセットでdputを使用すると、オリジナルの質問に編集できる出力が得られます。恐らくdput(allbr_demo_noEPP [1:30、])? –

+0

こんにちはエヴァン、私はデータが私のものではないので私はすべきかどうか分からない。私は他の誰かの研究データと協力しているので、公に共有することは私のものではありません。しかし、助けてくれてありがとう!おそらくデータセットがなければ手助けするのが難しいかもしれないので、私は質問を削除するべきでしょう。 –

+0

はい、一般的に私的研究データを共有することはお勧めしません。通常は、期待される出力で最初からサンプルを作成することをお勧めします。しかし、私はあなたが何かもっと欲しかったかどうかを見てみました。なぜなら、あなたはforループの結果からデータフレームのpvalueを捕捉したかったからです。 –

答えて

1

あなたは、単にp値救うために探している場合:おそらくあなたのforループの底にこれを入れて、あなたのデータセットとそう

str(wilcox.test(rnorm(10), rnorm(10, 2))) # example from running ?Wilcox.test 
wilcox.test(rnorm(10), rnorm(10, 2))$p.value # 

を:

pvalue[j] <- wilcox.test(allbr_demo_noEPP_year_geno_obs$relatedness, 
         all_poss_df_geno$relatedness, alternative='greater')$p.value 
関連する問題