2016-08-24 4 views
1

Rにサンプルコードを3つの別々のベクトル(list1、list2、list3)で置き換えずに書きました。リスト1から10回、リスト2から20回、リスト3から30回をサンプリングします。その後、ランダムサンプルの3つのリストを結合し、同じストリングを2〜3回サンプリングした回数を確認します。これを自動化して100回サンプリングして頻度カウントを取得できるようにするにはどうすればよいでしょうか?たとえば、3つのリストすべてから同じ文字列をランダムにサンプリングする頻度を確認したいとします。 ありがとうございます。ランダムなサンプリング手順を繰り返すループを作成する方法R

すべての入力データは、このような文字列の何千ものリストである:

リスト1:

 V1   
[1,] "EDA" 
[2,] "MGN2" 
[3,] "5RSK"  
[4,] "NBLN" 

私の現在のコード:

sample_list1 <-(sample(list1,10, replace=FALSE)) 
sample_list2 <-(sample(list2,20, replace=FALSE)) 
sample_list3 <-(sample(list3,20, replace=FALSE)) 

combined_randomgenes <- c(list1, list2, list3) 
combined_counts <- as.data.frame(table(combined_randomgenes)) 

overlap_3_lists <- nrow(subset(combined_counts, Freq == 3)) 
overlap_2_lists <- nrow(subset(combined_counts, Freq == 2)) 

私の3つのランダムサンプル全体で唯一の1があった場合すべての3つのランダムなサンプルで発生した文字列の場合、overlap_3_listsに値1が含まれると予想されます。値の分布を取得するように自動化したいので、ヒストグをプロットすることができますramには、3つのリストすべてでサンプリングされた0,1,2,3などの同一の文字列が何回あるかが分かります。

答えて

1

3番目のサンプルで20から30に変更します。また、combined_randomgenはsample_listxを参照する必要があります。次に、forループコードをその周りに置き、結果を割り当てます。ボーナスのヒント:スクリプト内でsubsetを使用することには注意が必要です&あなたの仕事が再現できるように種を設定してください。

set.seed(1234) 

list1 <- 1:60 
list2 <- 1:60 
list3 <- 1:60 

n <- 100 
runs <- data.frame(run=1:n,threes=NA,twos=NA) 
for(i in 1:n) { 
    sample_list1 <-(sample(list1,10, replace=FALSE)) 
    sample_list2 <-(sample(list2,20, replace=FALSE)) 
    sample_list3 <-(sample(list3,30, replace=FALSE)) 

    combined_randomgenes <- c(sample_list1, sample_list2, sample_list3) 
    combined_counts <- as.data.frame(table(combined_randomgenes)) 

    runs$threes[i] <- sum(combined_counts$Freq==3) 
    runs$twos[i] <- sum(combined_counts$Freq==2) 
} 

runs 
hist(runs$threes,5) 
hist(runs$twos,5) 
2

また、このように、少し読みやすく、mapply()を使用して試みることができる:

my_list <- list(A= 1:8, B= 1:8, C= 1:8) 

my_list_sampled <- mapply(sample, size = c(5,5,3), my_list) 
names(my_list_sampled) <- names(my_list) 


result<- table(stack(my_list_sampled)) 

hist(result) 

これはうまくデータを要約しますと、あなたは観測値の数に基づいてサブセットすることができます。

result_all_3 <- (result == "3") 

またはこの

result <- data.frame(ifelse(result> 0, 1, 0)) 

result$overlap <- rowSums(result) 

hist(result$overlap) 
のようなオーバーラップを数えます
関連する問題