当我输入没有`library(mgcv)`的`?mgcv-faq`时,为什么我会参考“算术”的手册页?

问题描述 投票:9回答:1

好吧,当我犯了一个错误时,我发现了这一点。我想获得mgcv.FAQ的手册页,但我

  • 忘了做library(mgcv);
  • 错误地把?mgcv-faq

但是,R奇怪地指导我进入doc页面,好像我已经完成了?Arithmetic

到底是怎么回事?在我做library(mgcv)后,把?mgcv-faq放入现在会出错:

#Error in eval(argExpr, envir) : object 'mgcv' not found
#Error in .signatureFromCall(fdef, expr, envir, doEval) : 
#  error in trying to evaluate the expression for argument ‘e1’ (mgcv)

谁能解释这种行为?


sessionInfo()之前的library(mgcv)

R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.5 LTS

Matrix products: default
BLAS/LAPACK: /usr/lib/libopenblas.so

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8    
 [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8   
 [7] LC_PAPER=en_GB.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C      

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.4.4

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base    

sessionInfo()之后的library(mgcv)

## only shows what is different from the above

other attached packages:
[1] mgcv_1.8-24  nlme_3.1-137

loaded via a namespace (and not attached):
[1] compiler_3.4.4  Matrix_1.2-14   tools_3.4.4     grid_3.4.4     
[5] lattice_0.20-35

我没有Rstudio,所以我在终端上运行R.手册页显示在终端中。

r
1个回答
10
投票

您可以使用以下内容重现:

expr <- quote(mgcv-faq)
utils:::.helpForCall(expr, parent.frame())

.helpForCall在内部通过?调用此输入。

现在,如果表达式不包含:::::调用,.helpForCall会提取符号以便查找

expr[[1L]]
#`-`

没有检查表达式的长度。

-运算符是表达式中的第一个,因为表达式被解析为函数语法。

为什么会这样?因为?应该能够在输入中处理:::::,并且没有人想到处理用户错误,例如你的错误。

© www.soinside.com 2019 - 2024. All rights reserved.