我正在调查R中数字运算的边角案例。我遇到了以下特殊情况,涉及零除以零:
(0/0)+NA
#> [1] NaN
NA+(0/0)
#> [1] NA
本文档由reprex软件包(v2.0.0)于2021-07-10创建
sessionInfo()
#> R version 4.1.0 (2021-05-18)
#> Platform: x86_64-apple-darwin17.0 (64-bit)
#> Running under: macOS Big Sur 10.16
#>
#> Matrix products: default
#> BLAS: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.dylib
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
#>
#> locale:
#> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> loaded via a namespace (and not attached):
#> [1] digest_0.6.27 withr_2.4.2 magrittr_2.0.1 reprex_2.0.0
#> [5] evaluate_0.14 highr_0.9 stringi_1.6.2 rlang_0.4.11
#> [9] cli_3.0.0 rstudioapi_0.13 fs_1.5.0 rmarkdown_2.9
#> [13] tools_4.1.0 stringr_1.4.0 glue_1.4.2 xfun_0.23
#> [17] yaml_2.2.1 compiler_4.1.0 htmltools_0.5.1.1 knitr_1.33
这显然违反了加法的交换律。我有两个问题:
是否有基于R语言定义的此行为的解释?
除了在加数子表达式中涉及副作用的情况外,是否存在其他违反加法交换律的例子(包括其他语言)?
?NaN
中更加明确地说明:"涉及NaN
的计算结果将返回NaN
或者可能是NA
,但这两种情况都无法保证,可能取决于R平台(因为编译器可能会重新排序计算步骤)"。 - HenrikNaN
混淆(看起来与平台有关):R语言NaN + NA行为 - Henrik