在 Redhat 上使用包含 rgdal 的库运行以下代码时,我得到不正确的结果。具体来说,inner_join 似乎复制了第一个数据帧的每一行,而不考虑第二个数据帧的键(因此只是复制而不是连接)。
这是一个从交互式 Web 应用程序 (r-shiny) 中更大的代码中提取的最小运行示例。在那里,我的原始数据框有数千行。除了不正确的结果之外,连接也会超出内存。
我已经尝试了几个 Linux Distros 和 R 版本。这是我遇到此错误的配置:Red Hat Enterprise Linux Server release 7.6 (Maipo) R 版本 3.5.2(来自 EPEL)或 3.6.0(从头开始编译)
> sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux Server 7.6 (Maipo)
Matrix products: default
BLAS: /opt/R/3.6.0/lib64/R/lib/libRblas.so
LAPACK: /opt/R/3.6.0/lib64/R/lib/libRlapack.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=de_CH.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=de_CH.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=de_CH.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=de_CH.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rgdal_1.4-4 sp_1.3-1 bit64_0.9-7 bit_1.1-14 dplyr_0.8.1
loaded via a namespace (and not attached):
[1] Rcpp_1.0.1 lattice_0.20-38 crayon_1.3.4 assertthat_0.2.1
[5] grid_3.6.0 R6_2.4.0 magrittr_1.5 pillar_1.4.1
[9] rlang_0.3.4 glue_1.3.1 purrr_0.3.2 compiler_3.6.0
[13] pkgconfig_2.0.2 tidyselect_0.2.5 tibble_2.1.2
该错误不会出现在 Ubuntu 18.04.2 LTS 上,无论是 R 版本 3.6.0 还是 R 版本 3.4.4。
这是代码:
library(dplyr)
library(bit64)
library(rgdal) # Bug only when including this package
df1 <- data.frame( a=c(1,2,3), id=as.integer64(c(10,11,12)) )
df2 <- data.frame( id=as.integer64(c(13,14)), b=c(4,5) )
print( df1 )
print( df2 )
# Bug
print( nrow( df1 ) ) # 3
t <- inner_join( df1, df2, by="id" )
print( nrow( t ) ) # correct would be 0, but returns 6!
结果是:
> t
a id b
1 1 10 4
2 1 10 5
3 2 11 4
4 2 11 5
5 3 12 4
6 3 12 5
正确的是:
> t
[1] a id b
<0 rows> (or 0-length row.names)
考虑到不同 Linux 发行版(但相同的 R 版本和库)上的不同结果,我认为该错误源于 RedHat 发行版中使用的底层库。我将非常感谢有关如何解决此问题的任何建议或指示。