循环中的子集不一致?
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
。
我每天都使用子集,但最近遇到了一个问题,当时我尝试使用索引向量在循环中进行子集化以指定子集条件。请参见下面的示例,其中因子未正确子集化?
我试着强迫它成为一个因素,但没有成功。我确定这是我的问题,而不是那个子集有问题。我只是不知道我做错了什么?
##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
。