相关疑难解决方法(0)

R中的模数错误

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

刚注意到R中的这个错误.我猜它是代表0.6的方式,但是谁知道到底发生了什么?

根据R:

0.3 %% 0.2 = 0.1
0.4 %% 0.2 = 0
0.5 %% 0.2 = 0.1
**0.6 %% 0.2 = 0.2**
0.7 %% 0.2 = 0.1
0.8 %% 0.2 = 0
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

r modulo

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

在R中,为什么不-1 + 1 = 0

有人可以帮我理解为什么-1 + 1 <> 0?

有人可以帮助我理解为什么我在内置函数consum(),我的函数ct()和Excel之间得到三个不同的值,当它们都在做同样的事情时?

现在,我很确定答案是一个"回合"问题,但我无法弄清楚这个问题的部分来自何处.我的意思是,这一切"看起来非常简单.

在R中,当我构建序列'a'然后运行cumsum(a)时,我没有像我期望的那样得到0的结果.如果我尝试使用函数计算相同的值,我也会得到不同的答案.最后,如果我尝试使用Excel计算相同的值,我会得到第三个答案.

这是我使用cumsum()得到的:

> a<- seq(-1, 1, by=.1)
> a
 [1] -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1  0.0  0.1  0.2  0.3
[15]  0.4  0.5  0.6  0.7  0.8  0.9  1.0
> cumsum(a)
 [1] -1.000000e+00 -1.900000e+00 -2.700000e+00 -3.400000e+00 -4.000000e+00
 [6] -4.500000e+00 -4.900000e+00 -5.200000e+00 -5.400000e+00 -5.500000e+00
[11] -5.500000e+00 -5.400000e+00 -5.200000e+00 -4.900000e+00 -4.500000e+00
[16] -4.000000e+00 -3.400000e+00 -2.700000e+00 -1.900000e+00 -1.000000e+00
[21]  1.110223e-15
Run Code Online (Sandbox Code Playgroud)

我写了一个快速函数来测试这个并期望得到相同的答案(或0),但我得到一个完全不同的答案.这是我的功能及其结果:

ct<- function(x){
        result = 0
        for(i in 1:length(x)){
           cat(i, ": Result = …
Run Code Online (Sandbox Code Playgroud)

r seq cumsum

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

R中的数据一致性:table vs ==

我观察到了这个:

> class(x)
[1] "numeric"
> str(x) 
num [1:2500] 1 1 1 1 1 1 1 1 1 1 ...
> table(x)
   1 
2500 
> table(x == 1)
FALSE  TRUE 
  299  2201 
> all.equal(x, rep(1,length(x)))
[1] TRUE
> dput(x)
c(1, ..... 1)  # all ones
Run Code Online (Sandbox Code Playgroud)

这怎么可能?我理解浮点数不应该==在一般情况下进行比较,但是应该table不一致==

PS.显然,table是与之一致,all.equal而不是==因为它首先将其参数转换为因子(即字符串).

PPS.table(x-1)显示非0值.

r

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

为什么 all.equal 在 dplyr 的 mutate 函数中不起作用?

考虑以下代码:

library(dplyr)       
patientID <- c(1, 2, 3, 4)
age <- c(25, 34, 28, 52)
diabetes <- c("Type1", "Type2", "Type1", "Type1")
status <- c("Poor", "Improved", "Excellent", "Poor")
patientdata <- data.frame(patientID, age, diabetes, status)
myf <- function(patientID, age, diabetes, status) { isTRUE(all.equal(age, 34))}
mutate(patientdata, isAge34 = myf(patientID, age, diabetes, status))
Run Code Online (Sandbox Code Playgroud)

我写信myf返回TRUEwhere 行age == 34,但这不起作用:

  patientID age diabetes    status isAge34
1         1  25    Type1      Poor   FALSE
2         2  34    Type2  Improved   FALSE
3         3  28    Type1 Excellent …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

R:all.equal 与 all

我试图使用 all 和 all.equal 来测试两个向量是否相等,但它们给出了不同的结果,我不确定为什么。

> x = seq(0,1,by=0.2)
> x
[1] 0.0 0.2 0.4 0.6 0.8 1.0
 > y = c(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)
> all(x == y)
[1]  FALSE
> all.equal(x, y)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

r

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

如何处理R中的浮点错误

考虑以下R函数

is.sqrt <- function(x, y){
  if(x^2 == y) TRUE
  else FALSE
}
Run Code Online (Sandbox Code Playgroud)

它回答x是y的平方根.如果y是一个完美的正方形,则函数的行为与预期一致 - is.sqrt(2,4)返回TRUE,is.sqrt(3,4)返回FALSE.如果y不是完美的正方形,则会出现问题.例如,

is.sqrt(sqrt(2), 2)
Run Code Online (Sandbox Code Playgroud)

返回FALSE.通过计算可以看出其原因

sqrt(2)^2 - 2
Run Code Online (Sandbox Code Playgroud)

返回4.440892e-16.我对如何解决这个问题的第一个想法是在将它与y进行比较之前对x ^ 2进行舍入但是多少是合适的?这甚至是推荐的方式吗?R中是否有标准方法来处理浮点精度?

floating-point r

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

降低 R 中双精度数的精度

我正在寻找一种方法来始终忽略 R 中浮点数之间的微小差异(根据 IEC 60559,这些是双精度浮点数),通过使用基础 R 工具而不使用 C 或 C++。换句话说,我想“舍入”双精度浮点数的有效数部分,这样像这样的东西返回 TRUE 而不是 FALSE:

1.45 - .55 == 2.45 - 1.55
## [1] FALSE
Run Code Online (Sandbox Code Playgroud)

就像是:

round_significand(1.45 - .55, bits=48) == round_significand(2.45 - 1.55, bits=48)
## [1] TRUE
Run Code Online (Sandbox Code Playgroud)

一个简单的方法round不起作用,因为我们需要四舍五入的级别取决于数字的大小。

data.table在内部做一些类似的事情,从?setNumericRounding

计算机无法使用基数 2 精确表示某些浮点数(例如 0.6)。这会导致在连接或分组“数字”类型的列时出现意外行为;即“双倍”,请参见下面的示例。在不希望出现这种情况的情况下,data.table 允许将此类数据四舍五入到大约 11 sf,这在许多情况下是足够的数字。这是通过舍入有效数的最后 2 个字节来实现的。其他可能的值是 1 字节舍入或不舍入(全精度,默认值)。

我正在研究一个 hack 实现,它将所有内容缩放为一个十进制数xfloor(log10(x)) == 1并且四舍五入,例如:

rnd_sig <- function(x, precision=10) {
  exp <- floor(log10(abs(x)))
  round(x * 10 ^ (-exp), precision) / 10 ^ …
Run Code Online (Sandbox Code Playgroud)

floating-point r

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

R:使用`(1 + 1/n)^ n`逼近`e = exp(1)`当`n`很大时给出荒谬的结果

所以,我只是在手动计算eR中的值,我发现有些东西对我来说有点令人不安.

e使用R exp()命令的价值......

exp(1)
#[1] 2.718282
Run Code Online (Sandbox Code Playgroud)

现在,我将尝试使用手动计算它 x = 10000

x <- 10000
y <- (1 + (1 / x)) ^ x
y
#[1] 2.718146
Run Code Online (Sandbox Code Playgroud)

不完全,但我们会尝试更接近使用 x = 100000

x <- 100000
y <- (1 + (1 / x)) ^ x
y
#[1] 2.718268
Run Code Online (Sandbox Code Playgroud)

温暖但有点偏......

x <- 1000000
y <- (1 + (1 / x)) ^ x
y
#[1] 2.71828
Run Code Online (Sandbox Code Playgroud)

现在,让我们尝试一个巨大的

x <- 5000000000000000
y <- (1 + (1 / x)) ^ x
y
#[1] 3.035035 …
Run Code Online (Sandbox Code Playgroud)

r exponential

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

如何在ggplot的渐变颜色比例栏中包含更多小数?

我根据坐标绘制 x 和 y,颜色是第三个连续变量,具有 6 位小数。

ggplot(data, aes(x=x, y=y, color=continuous_variable)) +
  geom_point()
Run Code Online (Sandbox Code Playgroud)

目前,颜色正在基于 3 位小数创建渐变,但我希望它显示 5。

有没有办法增加 ggplot 用于创建渐变的小数位数?

r legend ggplot2

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

为什么这两个表达式返回的结果不一样?

z = 3
N = 45
theta = 0.014
pbinom(z, N, theta, lower.tail = FALSE)
sum(dbinom(z:N, N, theta))
Run Code Online (Sandbox Code Playgroud)

我期望这两个表达式都返回上尾部区域 P(x >= 3)。

r

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

标签 统计

r ×10

floating-point ×2

cumsum ×1

dplyr ×1

exponential ×1

ggplot2 ×1

legend ×1

modulo ×1

seq ×1