[Rd] Fwd: Bug report: cbind with numeric and raw gives incorrect result
brodie gaslam
brodie@g@@l@m @ending from y@hoo@com
Tue Sep 25 14:52:16 CEST 2018
For what it's worth the following patch fixes that particular problem on my system. I have not checked very carefully to make sure this does not cause other problems, but at a high level it seems to make sense. In this particular part of the code I believe `mode` is taken to be the highest type of "column" encountered by `ctype` and based on conditionals it can (I think) be up to REALSXP here. This leads to a `INTEGER(REALSXP)` call, which presumably messes up the underlying double bit representation.
Again, I looked at this very quickly so I could be completely wrong, but I did at least build R with this patch and then no longer observed the odd behavior reported by mikefc.
Index: src/main/bind.c
===================================================================
--- src/main/bind.c (revision 75340)
+++ src/main/bind.c (working copy)
@@ -1381,11 +1381,16 @@
MOD_ITERATE1(idx, k, i, i1, {
LOGICAL(result)[n++] = RAW(u)[i1] ? TRUE : FALSE;
});
- } else {
+ } else if (mode == INTSXP) {
R_xlen_t i, i1;
MOD_ITERATE1(idx, k, i, i1, {
INTEGER(result)[n++] = (unsigned char) RAW(u)[i1];
});
+ } else {
+ R_xlen_t i, i1;
+ MOD_ITERATE1(idx, k, i, i1, {
+ REAL(result)[n++] = (unsigned char) RAW(u)[i1];
+ });
}
}
}
On Tuesday, September 25, 2018, 7:58:31 AM EDT, mikefc <mikefc using coolbutuseless.com> wrote:
Hi there,
using cbind with a numeric and raw argument produces an incorrect result.
I've posted some details below,
kind regards,
Mike.
e.g.
> cbind(0, as.raw(0))
[,1] [,2]
[1,] 0 6.950136e-310
A longer example shows that the result is not a rounding error, is not
consistent, and repeated applications get different results.
> cbind(0, as.raw(1:10))
[,1] [,2]
[1,] 0.000000e+00 0.000000e+00
[2,] 0.000000e+00 0.000000e+00
[3,] 0.000000e+00 0.000000e+00
[4,] 0.000000e+00 0.000000e+00
[5,] 0.000000e+00 6.950135e-310
[6,] 4.243992e-314 6.950135e-310
[7,] 8.487983e-314 6.324040e-322
[8,] 1.273197e-313 0.000000e+00
[9,] 1.697597e-313 -4.343725e-311
[10,] 2.121996e-313 1.812216e-308
This bug occurs on
* mac os (with R 3.5.1)
* linux (with R 3.4.4)
* Windows (with R 3.5.0)
My Session Info
R version 3.5.1 (2018-07-02)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.6
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/
A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/
Resources/lib/libRlapack.dylib
locale:
[1] en_AU.UTF-8/en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] memoise_1.1.0 ggplot2_3.0.0 nonogramp_0.1.0 purrr_0.2.5
dplyr_0.7.6
loaded via a namespace (and not attached):
[1] Rcpp_0.12.18 rstudioapi_0.7 bindr_0.1.1 magrittr_1.5
tidyselect_0.2.4 munsell_0.5.0 colorspace_1.3-2 R6_2.2.2
rlang_0.2.1.9000 stringr_1.3.1 plyr_1.8.4 tools_3.5.1
grid_3.5.1
[14] packrat_0.4.9-3 gtable_0.2.0 withr_2.1.2 digest_0.6.15
lazyeval_0.2.1 assertthat_0.2.0 tibble_1.4.2 crayon_1.3.4
bindrcpp_0.2.2 pryr_0.1.4 codetools_0.2-15 glue_1.3.0
labeling_0.3
[27] stringi_1.2.4 compiler_3.5.1 pillar_1.3.0 scales_0.5.0
pkgconfig_2.0.1
[[alternative HTML version deleted]]
______________________________________________
R-devel using r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list