相关疑难解决方法(0)

为什么不在R中按预期削减工作?

为什么这两个不会返回相同的结果?

    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)

r

1
推荐指数
1
解决办法
103
查看次数

用r中的seq加速嵌套for循环

我想用二进制值创建一个新列(df_one $ acceslane).if df_one$direction == df_two$direction和if df_one$locationdf_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)

performance for-loop r

1
推荐指数
1
解决办法
58
查看次数

在 R 中比较时,相同的数字显示为 false

可能重复:
在 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)

我的问题是,有没有更优雅的解决方案?这是一个应该报告的错误吗?

谢谢你的时间。

r rounding

0
推荐指数
1
解决办法
2645
查看次数

对于平等的比较,两个看似相等的值给出了FALSE

我有两列包含数据.在比较这些列时,我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))的"灵敏度"?

comparison r

0
推荐指数
1
解决办法
372
查看次数

> =不工作,R

我正在运行下面的代码.函数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)

double logic if-statement r

0
推荐指数
1
解决办法
940
查看次数

检查特征值是否等于实数的不同方法?

我有以下矩阵

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.equalsignif.答案可以讨论这些选项吗?

r eigenvalue complex-numbers

0
推荐指数
1
解决办法
111
查看次数

R中的逆矩阵乘法不给出单位矩阵

我用%*%来表示矩阵及其反函数.我没有得到单位矩阵.我错过了什么?

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)

r

0
推荐指数
1
解决办法
464
查看次数

来自基 R 的 `/` 或舍入函数中的错误

当我遇到函数产生的相当奇怪的差异时,我一直试图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 data.table

0
推荐指数
1
解决办法
35
查看次数

意外的行为大于和小于

可能重复:
为什么这些数字不相等?

任何人都可以向我解释,为什么R FALSE在以下情况下回答?

(1-0.9)>=0.1
Run Code Online (Sandbox Code Playgroud)

我怎么能得到TRUE这种比较?

comparison r

-2
推荐指数
2
解决办法
190
查看次数