Loop中的子集是不一致的?

时间:2015-11-24 22:35:46

标签: r for-loop subset

我每天使用子集,但是当我尝试使用索引向量在循环内进行子集以指定子集条件时,最近遇到了问题。请参阅下面的示例,其中因子没有正确分配?

我试图强迫它成为一个没有运气的因素。我确定这是我的问题,而不是那个子集是错误的。我无法弄清楚我做错了什么?

   ##make df

    df<-data.frame(factor=c("red","green","green","blue"), Numeric=c(1:3,3))


    ## subset by numeric
    Numeric<-unique(df$Numeric)

    for(i in 1:length(Numeric)){
    print(subset(df, Numeric==Numeric[i]))
    }

  ##this works as expected
      factor Numeric
1    red       1
  factor Numeric
2  green       2
  factor Numeric
3  green       3
4   blue       3

    ## subset by facor
    factor<-unique(df$factor)

    for(j in 1:length(factor)){
      print(subset(df, factor==factor[[j]]))
    }

##This runs, but fails, green is subsetted twice and blue is missed
  factor Numeric
1    red       1
  factor Numeric
2  green       2
3  green       3
  factor Numeric
2  green       2
3  green       3

2 个答案:

答案 0 :(得分:2)

我不认为这与名称因素有关。&#39;。请参阅这些按预期成功的实例:

 for(j in unique(df$factor) ){
   print(subset(df, factor==j))
 }
#-----
  factor Numeric
1    red       1
  factor Numeric
2  green       2
3  green       3
  factor Numeric
4   blue       3

 for(j in factor ){
   print(subset(df, factor==j))
 }
#------
  factor Numeric
1    red       1
  factor Numeric
2  green       2
3  green       3
  factor Numeric
4   blue       3

第一个例子将通过被承认的不明智名称&#34;因素&#34;来消除对外部对象的需要。帮助页面的警告明确适用于for - 在循环中使用的循环。

答案 1 :(得分:2)

我认为@ 42-并且我可能根本就没有很好地沟通,所以为了清楚起见,我在评论中提到的只是改变第二个例子如下:

> f<-unique(df$factor)
> f
[1] red   green blue 
Levels: blue green red

> for(j in 1:length(f)){
+   print(subset(df, factor==f[j]))
+ }
  factor Numeric
1    red       1
  factor Numeric
2  green       2
3  green       3
  factor Numeric
4   blue       3

似乎会产生正确的结果,因此我的结论是subset发现了错误的factor