首先,我在R中创建一个简单的数据框:
Test <- as.data.frame(matrix(ncol=20,nrow=60))
接下来我填写几列:
Test[,1] <- 1
Test[,2] <- 2
接下来,我测试以确保我可以正确引用这些值:
Test[1,2]
[1] 2
这可以按预期工作。然后,我创建了几个变量,为具有非整数序列的for循环做准备:
j <- 1.2
h <- ((j-1)*10)
h
[1] 2
然后我使用“h”从数据框中提取值:
Test[1,h]
[1] 1
这会产生意外结果。 (它应该是2)。
这是为什么? R中是否存在与使用变量引用列相关联的问题?
答案 0 :(得分:1)
唯一可以用R的数字类型精确表示的数字 是分数为2的幂的整数和分数。其他 数字必须四舍五入到(通常)53二进制数字的精确度。 结果,两个浮点数不会可靠地相等 除非它们是由同一算法计算的,并非总是如此 即便如此。
函数 all.equal()使用.Machine $ double.eps ^ 0.5的数字容差来比较两个对象。如果你想要更大 准确度比这要高,你需要考虑错误传播 小心。
因此,请使用
all.equal(1, h)