为什么这两个不会返回相同的结果?
D = data.frame( x=c( 0.6 ) )
D$binned = cut( D$x, seq( 0.50,0.70,0.025 ), include.lowest=TRUE, right=FALSE )
D # 0.6 is binned correctly as [0.6,0.625)
D$binned = cut( D$x, seq( 0.55,0.65,0.025 ), include.lowest=TRUE, right=FALSE )
D # 0.6 is binned incorrectly as [0.575,0.6)
Run Code Online (Sandbox Code Playgroud) 我想用二进制值创建一个新列(df_one $ acceslane).if df_one$direction == df_two$direction和if df_one$location和df_two$location几乎相同( - >参见嵌套for循环中的Distance)它应该是1.
df_one:
direction | location | acceslane
L | 12.3 | NA
R | 14.8 | NA
Run Code Online (Sandbox Code Playgroud)
df_two:
direction | location
L | 12.5
R | 145.0
for (i in 1:nrow(df_one)) {
for (j in 1:nrow(df_two)) {
Distance <- seq(df_two[j, 2]-.5, df_two[j, 2]+.5, by = .1)
if ((x[i, 1] == df_two[j, 1]) & (x[i, 2] %in% Distance)){
df_one[i, 3] <- 1
break}
else{df_one[i, 3] <- 0} …Run Code Online (Sandbox Code Playgroud) 可能重复:
在 R 中,这两者有什么区别?
R中的浮点问题?
这是我创建的代码的一部分。我花了几天时间寻找问题,最终意识到应该为 TRUE 的比较被 R 计算为 FALSE。我在 Windows 上使用 R 2.14.2 64 位。这是重现问题的代码。
concList= c(1.15, 1.15, 1.15 ,1.15 ,1.15 ,1.15 )
concList=concList-0.4
a=sum(concList)
b=length(concList)*0.75
str(a)
str(b)
print(a==b)
Run Code Online (Sandbox Code Playgroud)
即使它们显示为完全相同的数字,最后一次打印也会导致 FALSE。我认为这可能是 R 的浮点数值表示上的一些问题,所以我添加了下面的代码来解决这个问题。
a=round(a,1)
b=round(b,1)
print(a==b)
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有更优雅的解决方案?这是一个应该报告的错误吗?
谢谢你的时间。
我有两列包含数据.在比较这些列时,我FALSE在这一行上得到了回报,这让我很难过.
dat[82,"UG_accept_avg_total.x"]
## [1] 1.842105
dat[82,"UG_accept_avg_total.y"]
## [1] 1.842105
dat[82,"UG_accept_avg_total.x"]==dat[82,"UG_accept_avg_total.y"]
## [1] FALSE
Run Code Online (Sandbox Code Playgroud)
我读了这个问题的答案,这个问题解释了为什么我的问题出现了,但答案对我没有多大帮助,因为:
all.equal(dat[82,"UG_accept_avg_total.x"],dat[82,"UG_accept_avg_total.y"])
## "Mean relative difference: 1.427714e-07"
isTRUE(all.equal(dat[82,"UG_accept_avg_total.x"],dat[82,"UG_accept_avg_total.y"]))
## [1] FALSE
Run Code Online (Sandbox Code Playgroud)
我可以在小数点之后删除一些数字,因为3可能已经足够了,但是检查我的数据集中的所有数据字段(超过250000)来执行此操作将是相当浪费的资源使用.有人有更好的建议吗?有没有办法降低isTRUE(all.equal(x,y))的"灵敏度"?
我正在运行下面的代码.函数Ax返回值1.但是ifelse语句不识别Ax == 1.
我已经尝试使函数的输出为双精度,所有数值都加倍.这没效果.
我希望:
1)帮助解决此特定情况
2)获取有关如何避免此问题的提示
Axfun<-function(beta,gamma,a,b,g,H0stud,Wh,Wi){
((b*beta + g*gamma)*(1 + 2*g*gamma)*(1 + gamma + b*((-beta)*(1 + gamma) + a*(-1 + beta)*(1 + g*gamma)))*H0stud*Wi)/
((-1 + b*beta)*(1 + gamma)*((-g)*gamma*(1 + 2*g*gamma)*Wi + b*beta*((-1 + g*gamma*(-2 + H0stud) + H0stud)*Wh - (1 + g*gamma)*H0stud*Wi)))
}
Ax<-Axfun(2^1,
2^0,
2^0,
2^-3,
2^-1,
1,
1,
0.4)
ifelse(Ax>=1, 0, Ax)
Run Code Online (Sandbox Code Playgroud) 我有以下矩阵
M <- structure(c(0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 1, 0), .Dim = c(5L, 5L))
Run Code Online (Sandbox Code Playgroud)
我想找到正好为1的特征值.我认为这样可行:
Re(eigen(M)$values) == 1 & Im(eigen(M)$values) == 0
Run Code Online (Sandbox Code Playgroud)
但Re(eigen(M)$values) == 1不认为第5个特征值等于1,即使它确实如此.我错过了什么?
编辑:只要它指出了一个浮点问题,我研究了一点,了解几种解决方案,包括使用abs(value) < tol,all.equal和signif.答案可以讨论这些选项吗?
我用%*%来表示矩阵及其反函数.我没有得到单位矩阵.我错过了什么?
D
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 2 1
[3,] 2 2 0
solve(D)
[,1] [,2] [,3]
[1,] -0.1428571 0.4285714 -0.2857143
[2,] 0.1428571 -0.4285714 0.7857143
[3,] 0.2857143 0.1428571 -0.4285714
D %*% solve(D)
[,1] [,2] [,3]
[1,] 1.000000e+00 0.000000e+00 -2.220446e-16
[2,] -5.551115e-17 1.000000e+00 0.000000e+00
[3,] -1.110223e-16 -1.110223e-16 1.000000e+00
Run Code Online (Sandbox Code Playgroud) 当我遇到函数产生的相当奇怪的差异时,我一直试图data.table通过将round函数添加到ITime类来为包做出贡献round。在幕后,类的对象ITime只是一个具有漂亮格式的整数向量,因此unclass(object)提供了一个整数向量。
将这个整数向量四舍五入到最接近的分钟可以这样完成:
x <- as.ITime(seq(as.POSIXct("2020-01-01 07:00:00"), as.POSIXct("2020-01-01 07:10:00"), "30 sec"))
round(unclass(x) / 60L) * 60L
# or
round(as.integer(x) / 60L) * 60L
Run Code Online (Sandbox Code Playgroud)
问题就在这里……
当我执行此操作时,我希望unclass(x) / 60以 0.5 结尾的任何实例都被四舍五入。然而,事实并非如此!
我已经在两台不同的计算机上的 Windows 和 Mac 上尝试了这个例子,结果相同。有没有人知道为什么会发生这种情况?
** 仅供参考,我知道这个特定问题可以用不同的方式解决:unclass(x) %/% 60L. 但我感兴趣的是为什么该round功能不能按预期工作。
可能重复:
为什么这些数字不相等?
任何人都可以向我解释,为什么R FALSE在以下情况下回答?
(1-0.9)>=0.1
Run Code Online (Sandbox Code Playgroud)
我怎么能得到TRUE这种比较?
r ×9
comparison ×2
data.table ×1
double ×1
eigenvalue ×1
for-loop ×1
if-statement ×1
logic ×1
performance ×1
rounding ×1