【问题标题】:For loop that outputs a unique dataframe after each iteration每次迭代后输出唯一数据帧的循环
【发布时间】:2017-03-17 06:02:25
【问题描述】:

我知道在 R 中必须有一种简单的方法可以在 For 循环中迭代这个过程,但我在编写循环方面还很陌生。这是我想用循环完成的过程

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

所以输出应该是四个数据帧sfus1、sfus2、sfus3和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
}

【问题讨论】:

    标签: r for-loop


    【解决方案1】:

    首先创建一个列表,否则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)
    }
    

    这可能需要稍作调整,因为没有可供测试的样本数据集

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多