[Rd] Strange behaviour of do.call()

Serguei Sokol @oko| @end|ng |rom |n@@-tou|ou@e@|r
Tue Sep 19 17:05:57 CEST 2023


Le 19/09/2023 à 16:44, Duncan Murdoch a écrit :
> The knitr::kable() function does some internal setup, including 
> determining the target format, and then calls an internal function using
>
>   do.call(paste("kable", format, sep = "_"), list(x = x,
>         caption = caption, escape = escape, ...))
>
> I was interested in setting the `vlign` argument to 
> knitr:::kable_latex, using this code:
>
>   knitr::kable(head(mtcars), format="latex", align = "c", vlign="")
>
> If I debug knitr::kable, I can see that `vlign = ""` is part of 
> list(...).  However, if I debug knitr:::kable_latex, I get weird results:
>
>   > debug(knitr:::kable_latex)
>   > knitr::kable(head(mtcars), format="latex", align = "c", vlign="")
If I do this in my R v4.3.1 on linux, I get:

 > debug(knitr:::kable_latex)
 > knitr::kable(head(mtcars), format="latex", align = "c", vlign="")
Error in kable_latex(x = c("Mazda RX4", "Mazda RX4 Wag", "Datsun 710",  :
   unused argument (vlign = "")

By looking at args(knitr:::kable_latex), I see 2 similar arguments 
'valign' and 'vline' but no 'vlign'.
Can it be just a typo in your code?


> debugging in: kable_latex(x = c("Mazda RX4", "Mazda RX4 Wag", "Datsun 
> 710",
>   "Hornet 4 Drive", "Hornet Sportabout", "Valiant", "21.0", "21.0",
>   "22.8", "21.4", "18.7", "18.1", "6", "6", "4", "6", "8", "6",
>   "160", "160", "108", "258", "360", "225", "110", "110", "93",
>   "110", "175", "105", "3.90", "3.90", "3.85", "3.08", "3.15",
>   "2.76", "2.620", "2.875", "2.320", "3.215", "3.440", "3.460",
>   "16.46", "17.02", "18.61", "19.44", "17.02", "20.22", "0", "0",
>   "1", "1", "0", "1", "1", "1", "1", "0", "0", "0", "4", "4", "4",
>   "3", "3", "3", "4", "4", "1", "1", "2", "1"), caption = NULL,
>       escape = TRUE, vlign = "")
> debug: {
>
>   [rest of function display omitted]
>
> I see here that vlign = "" is being shown as an argument. However, 
> when I print vlign, sometimes I get "object not found", and somethings 
> I get
>
>   Browse[2]> vline
>   debug: [1] "|"
Here again, 'vline' is used on purpose instead of 'vlign'?

Best,
Serguei.

>
> (which is what the default value would be).  In the latter case, I 
> also see
>
>   Browse[2]> list(...)
>   $vlign
>   [1] ""
>
> i.e. vlign remains part of the ... list, it wasn't bound to the 
> argument named vlign.
>
> I can't spot anything particularly strange in the way knitr is 
> handling this; can anyone else?  My sessionInfo() is below.
>
> Duncan Murdoch
>
> > sessionInfo()
> R version 4.3.1 (2023-06-16)
> Platform: x86_64-apple-darwin20 (64-bit)
> Running under: macOS Monterey 12.6.9
>
> Matrix products: default
> BLAS: 
> /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRblas.0.dylib 
>
> LAPACK: 
> /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib; 
>  LAPACK version 3.11.0
>
> locale:
> [1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8
>
> time zone: America/Toronto
> tzcode source: internal
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods base
>
> loaded via a namespace (and not attached):
> [1] compiler_4.3.1 tools_4.3.1    knitr_1.44     xfun_0.40
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel


-- 
Serguei Sokol
Ingenieur de recherche INRAE

Cellule Mathématiques
TBI, INSA/INRAE UMR 792, INSA/CNRS UMR 5504
135 Avenue de Rangueil
31077 Toulouse Cedex 04

tel: +33 5 61 55 98 49
email: sokol using insa-toulouse.fr
https://www.toulouse-biotechnology-institute.fr/en/plateformes-plateaux/cellule-mathematiques/



More information about the R-devel mailing list