在R环境中编程时,我使用了rep("[35,40)",1020).这应该给我一个1020次"[35,40]"的列表.但是,结果只包含1019个这些元素.
编程首先在两个向量的复制中完成,但即使我将其拆分它也不起作用.
我尝试使用不同版本的R(R 2.11.1,R 2.9.0,R 2.10.0,R 2.7.2),但它们都没有正常工作.
有没有人知道如果有一个版本的R没有这个bug?或者我如何解决这个问题?
所以这个代码:
> agecats
[1] "(-0.001,5]" "(5,10]" "(10,15]" "(15,20]" "(20,25]"
[6] "(25,30]" "(30,35]" "(35,40]" "(40,45]" "(45,50]"
[11] "(50,55]" "(55,60]" "(60,65]" "(65,70]" "(70,75]"
[16] "(75,80]"
> weightage<-c(0.9,0.9,2.7,3.1,8.9,10.05,10.05,10.2,10.2,9.3,9.3,8.7,7.9,3.15,3.15,1.5)
> weightage
[1] 0.90 0.90 2.70 3.10 8.90 10.05 10.05 10.20 10.20 9.30 9.30 8.70
[13] 7.90 3.15 3.15 1.50
> weightage100<-weightage*100
> weightage100
[1] 90 90 270 310 890 1005 1005 1020 1020 930 930 870 790 315 315
[16] 150
> tosamplefrom<-rep(agecats,weightage100)
> table(tosamplefrom)
tosamplefrom
(-0.001,5] (10,15] (15,20] (20,25] (25,30] (30,35] (35,40]
90 270 310 890 1005 1005 1019
(40,45] (45,50] (5,10] (50,55] (55,60] (60,65] (65,70]
1019 930 90 930 869 790 315
(70,75] (75,80]
315 150
Run Code Online (Sandbox Code Playgroud)
在这里,我应该有8和9 1020次,它只给出了1019次.
金
Joh*_*ohn 11
(10.20 * 100) == 1020
FALSE
Run Code Online (Sandbox Code Playgroud)
这是你的问题.10.2无法准确表示,一切都会下地狱,因为你将浮点数乘以并假设它是一个整数.似乎R必须占用数字的底线或者仅使用as.integer进行转换:
floor(10.2*100)
1019
as.integer(10.2*100)
1019
Run Code Online (Sandbox Code Playgroud)
无论浮点值是略高于还是略低于下方,舍入都将起作用.以下更改可以解决问题.
weightage100 <- round (weightage*100)
Run Code Online (Sandbox Code Playgroud)
阅读R Inferno(像这样的浮点问题不是R独有的,例如,我只是在python中复制它)