题目描述
R语言 WITHIN函数的一个BUG?
题目来源及自己的思路
用within函数分类时发现的问题
相关代码
似乎没法显示正确R代码,只好贴图了。
你期待的结果是什么?实际看到的错误信息又是什么?
第一次 + b[b>3000 & b<=9999.9]<-"A"
第二次 + b[b>3000 & b<=10000.0]<-"A"
仅增加了0.1,分类就无法获得正确结果。
各位大神看看,是不是R语言WITHIN函数的BUG?
R语言 WITHIN函数的一个BUG?
用within函数分类时发现的问题
似乎没法显示正确R代码,只好贴图了。
第一次 + b[b>3000 & b<=9999.9]<-"A"
第二次 + b[b>3000 & b<=10000.0]<-"A"
仅增加了0.1,分类就无法获得正确结果。
各位大神看看,是不是R语言WITHIN函数的BUG?
比较优雅的方式:
f %>%
mutate( b = case_when(
b %>% between(1000,3000) ~ "B",
b %>% between(3000,9999.9) ~ "A"
TRUE ~ b
)
每一次赋值时,自动将f$b转成了character
f <- data.frame(a = c(1,2,3,4,5,6), b = c(4400,2220,3080,3140,0,1150))f
a b
1 1 4400
2 2 2220
3 3 3080
4 4 3140
5 5 0
6 6 1150f <- within(f,{
f
a b
1 1 4400
2 2 B
3 3 3080
4 4 3140
5 5 0
6 6 Bsummary(f)
a b
Min. :1.00 Length:6
1st Qu.:2.25 Class :character
Median :3.50 Mode :character
Mean :3.50
3rd Qu.:4.75
Max. :6.00
within(f,{
1 1 4400
2 2 B
3 3 3080
4 4 3140
5 5 0
6 6 B
"4400" <= 10000.0
[1] FALSE"4400" <= 9999.9
[1] TRUEf <- data.frame(a = c(1,2,3,4,5,6), b = c(4400,2220,3080,3140,0,1150))
f
a b
1 1 4400
2 2 2220
3 3 3080
4 4 3140
5 5 0
6 6 1150f <- within(f,{
f
a b
1 1 4400
2 2 1
3 3 3080
4 4 3140
5 5 0
6 6 1summary(f)
a b
Min. :1.00 Min. : 0
1st Qu.:2.25 1st Qu.: 1
Median :3.50 Median :1540
Mean :3.50 Mean :1770
3rd Qu.:4.75 3rd Qu.:3125
Max. :6.00 Max. :4400
within(f,{
1 1 2
2 2 1
3 3 2
4 4 2
5 5 0
6 6 1
主要是R的比较操作符和其他语言相比有点奇怪。
花括号第一步会隐式地将b转为字符串向量,字符串向量的比较操作符可见参考文档:https://www.rdocumentation.or...