循环中的子集不一致?

Subset is inconsistent within Loop?

我每天都使用子集,但最近遇到了一个问题,当时我尝试使用索引向量在循环中进行子集化以指定子集条件。请参见下面的示例,其中因子未正确子集化?

我试着强迫它成为一个因素,但没有成功。我确定这是我的问题,而不是那个子集有问题。我只是不知道我做错了什么?

   ##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

我认为这与名字 'factor' 没有任何关系。查看这些按预期成功的实例:

 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

第一个示例通过公认的不明智的名称 "factor" 消除了对外部对象的需求。帮助页面的警告显然适用于它在 for-loops 中的使用,毕竟它们是函数。

我认为 @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