2017-03-16 10 views
0

このプロセスをForループで反復するにはRで簡単な方法が必要であることは知っていますが、私はループを書く際にはかなり新しいです。ここで私はそう出力は、4つのデータフレームsfus1、sfus2、sfus3、と私は書くことを試み、次のループは動作しませんsfus4各繰り返しの後に一意のデータフレームを出力するループ

あるべきループ

sfus1a<-ddply(sfus,.(Phylum),nrow);sfus1a[1,1] 
sfus1b<-subset(sfus,sfus$Phylum==sfus1a[1,1]) 
sfus1<-ddply(sfus1b,.(Genus),nrow);sfus1 

sfus1a<-ddply(sfus,.(Phylum),nrow);sfus1a[2,1] 
sfus1b<-subset(sfus,sfus$Phylum==sfus1a[2,1]) 
sfus2<-ddply(sfus1b,.(Genus),nrow);sfus2 

sfus1a<-ddply(sfus,.(Phylum),nrow);sfus1a[3,1] 
sfus1b<-subset(sfus,sfus$Phylum==sfus1a[3,1]) 
sfus3<-ddply(sfus1b,.(Genus),nrow);sfus3 

sfus1a<-ddply(sfus,.(Phylum),nrow);sfus1a[4,1] 
sfus1b<-subset(sfus,sfus$Phylum==sfus1a[4,1]) 
sfus4<-ddply(sfus1b,.(Genus),nrow);sfus4 

で達成したいプロセスがあります

for(i in 1:4){ 
    sfus1a<-ddply(sfus,.(Phylum),nrow);sfus1a[i,1] 
    sfus1b<-subset(sfus,sfus$Phylum==sfus1a[i,1]) 
    sfusi<-ddply(sfus1b,.(Genus),nrow);sfusi 
} 

答えて

2

第さもなければforループが上書きされる変数のリストを作成し、各反復

# pre-allocate lists 
sfus1a <- vector(mode = "list", length = nrow(sfus)) 
sfus1b <- vector(mode = "list", length = nrow(sfus)) 
sfusi <- vector(mode = "list", length = nrow(sfus)) 

for(i in 1:4){ 
    sfus1a[i] <- ddply(sfus, .(Phylum), nrow) 
    sfus1b[i] <- subset(sfus, sfus$Phylum == sfus1a[i, 1]) 
    sfusi[i] <- ddply(sfus1b, .(Genus), nrow) 
} 

これは、テスト対象のサンプルデータがないため、微調整が必​​要な場合があります。

関連する問題