[Rd] "if" function in pure R?
Hi all, Could anyone refer to me to a good source to learn how to program a simple control-flow construct* in R, or provide me with a simple example? Control-flow constructs are programmed as primitives, but I would like to be able to do that (if possible) in pure R. The general context is that those functions are a mystery to me. The motivating example is that I would like to create a function that behave similarly to base::`if` with an extra argument to the function (e.g. to include an error rate on the condition). Many thanks, Alex * control-flow constructs are functions such as if, for, while... that allow for call of the form fn(x) expr to work (see ?Control). -- Alexandre Courtiol http://sites.google.com/site/alexandrecourtiol/home *"Science is the belief in the ignorance of experts"*, R. Feynman [[alternative HTML version deleted]] __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] "if" function in pure R?
Thanks a lot Jiefei, I had thought of defining a binary operator (inspired by pipes) or simply using an additional condition in the if() calls [e.g. if(foo & fn(bar)) doSomeThing; with fn(bar) returning a logical], but both are workaround that I do not find as elegant as a proper control-flow construct. Thus two questions remain: - is it possible to create a control-flow construct in pure R? - if yes, how? Anyone with more insights? Thanks On Mon, 27 May 2019 at 04:27, King Jiefei wrote: > Hi Alexandre, > > I'm not an R expert so this is only my personal thought: > > I don't think you can achieve what you want exactly. A possible solution > would be defining a binary operator %*%, where you can replace the asterisk > with any function name you want. The function %*% is special since it has > two arguments, left operand and right operand respectively. You then > can call the `substitute` function to get its function arguments in an > expression format and proceed to do what you want. Here is an example to > show the idea. > > *Code:* > > `%myOperator%` <- function(x, y) { > x = substitute(x) > y = substitute(y) > return(list(x, y)) > } > > > myIf(i == 1, arg1) %myOperator% { > doSomeThing > } > > > *Results:* > > [[1]] > myIf(i == 1, arg1) > > [[2]] > { > doSomeThing > } > > I hope that helps. > > Best, > Jiefei > > On Sun, May 26, 2019 at 4:45 AM Alexandre Courtiol < > alexandre.court...@gmail.com> wrote: > >> Hi all, >> >> Could anyone refer to me to a good source to learn how to program a simple >> control-flow construct* in R, or provide me with a simple example? >> >> Control-flow constructs are programmed as primitives, but I would like to >> be able to do that (if possible) in pure R. >> >> The general context is that those functions are a mystery to me. The >> motivating example is that I would like to create a function that behave >> similarly to base::`if` with an extra argument to the function (e.g. to >> include an error rate on the condition). >> >> Many thanks, >> >> Alex >> >> * control-flow constructs are functions such as if, for, while... that >> allow for call of the form fn(x) expr to work (see ?Control). >> >> -- >> Alexandre Courtiol >> >> http://sites.google.com/site/alexandrecourtiol/home >> >> *"Science is the belief in the ignorance of experts"*, R. Feynman >> >> [[alternative HTML version deleted]] >> >> __ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >> > -- Alexandre Courtiol http://sites.google.com/site/alexandrecourtiol/home *"Science is the belief in the ignorance of experts"*, R. Feynman [[alternative HTML version deleted]] __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
[Rd] mget call can trigger C stack usage error
Hi all, not sure if you will call this a bug or something else but the following silly call trigger a low level error: foo <- list(x=1) class(foo) <- "new" print.new <- function(x, ...) print(mget(names(formals( foo > Error: C stack usage 7969412 is too close to the limit -- Alexandre Courtiol http://sites.google.com/site/alexandrecourtiol/home *"Science is the belief in the ignorance of experts"*, R. Feynman [[alternative HTML version deleted]] __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
[Rd] potential bug in simulate.lm when gaussian(link != "identity")
Dear all, I think that there is a bug in the function simulate.lm() when called upon a glm fitted with gaussian family with a link other than identity. The variance of the simulated response is clearly off and an inspection to the code of simulate.lm reveals that it is because the variance is divided by the model weights (precisely, not the prior ones), which is not documented. Can somebody file this bug for me (if you agree that this is a bug)? Many thanks. Alex Simple demonstration: set.seed(1L) y <- 10 + rnorm(n = 100) mean(y) ## 10.10889 var(y) ## 0.8067621 mod_glm1 <- glm(y ~ 1, family = gaussian()) new.y1 <- simulate(mod_glm1)[, 1] mean(new.y1) ## 10.07493 var(new.y1) ## 0.7402303 mod_glm2 <- glm(y ~ 1, family = gaussian(link = "log")) new.y2 <- simulate(mod_glm2)[, 1] mean(new.y2) ## 10.11152 var(new.y2) ## 0.008445062 # WRONG # mod_glm3 <- mod_glm2 mod_glm3$weights <- NULL new.y3 <- simulate(mod_glm3)[, 1] mean(new.y3) ## 10.15524 var(new.y3) ## 0.7933856 # OK(?) # ### my session ### > sessionInfo() R version 3.4.0 (2017-04-21) Platform: x86_64-apple-darwin16.5.0 (64-bit) Running under: macOS Sierra 10.12.4 Matrix products: default BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib LAPACK: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.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] compiler_3.4.0 tools_3.4.0 -- Alexandre Courtiol http://sites.google.com/site/alexandrecourtiol/home *"Science is the belief in the ignorance of experts"*, R. Feynman [[alternative HTML version deleted]] __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
[Rd] Bug simulate.lm() --> needs credential to report it
Dear R developers, I did not get any reply concerning my email from last week concerning the bug I found in stats::simulate.lm(). The bug shows up when called upon a GLM with family gaussian(). I am confident it is a genuine bug related to a mix-up between weights and prior weights that only impacts the gaussian family (other families have their own simulate functions defined elsewhere). I cannot add the bug in Bugzilla as I have no credential. Could someone please help me to get credentials so that I can add the bug in bugzilla? Thanks a lot, Simple demonstration for the bug: set.seed(1L) y <- 10 + rnorm(n = 100) mean(y) ## 10.10889 var(y) ## 0.8067621 mod_glm <- glm(y ~ 1, family = gaussian(link = "log")) new.y <- simulate(mod_glm)[, 1] mean(new.y) ## 10.10553 var(new.y) ## 0.007243695 # WRONG # mod_glm$weights <- mod_glm$prior.weights ## ugly hack showing where the issue is new.y <- simulate(mod_glm)[, 1] mean(new.y) ## 10.13554 var(new.y) ## 0.8629975 # OK # -- Alexandre Courtiol http://sites.google.com/site/alexandrecourtiol/home *"Science is the belief in the ignorance of experts"*, R. Feynman [[alternative HTML version deleted]] __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
[Rd] vignettes present in 2 folders or won't work
Dear all, I am struggling with an issue related to static vignettes: they work, but only when present in double in the tarball -- in the folder inst/doc and vignettes; see below for details. Details: I am pre-compiling heavy vignettes thanks to the vignette builder R.rsp. So basically, I have PDF files which I want the package to use as Vignettes. For this, I have the following in my Description file: VignetteBuilder: R.rsp I am organising the vignette by hand using a Makefile (because this is the only way that has proven 100% reliable to me, across a variety of situations). In my Makefile, I have something like: build: clean mkdir -p inst/doc mkdir vignettes -cp sources_vignettes/*/*.pdf* vignettes Rscript -e "tools::compactPDF(paths = 'vignettes', gs_quality = 'printer')" cp vignettes/*.pdf* inst/doc Rscript -e "devtools::document()" mkdir inst/extdata/sources_vignettes cp sources_vignettes/*/*.Rnw inst/extdata/sources_vignettes Rscript -e "devtools::build(vignettes = FALSE)" That works fine, the vignettes show up using browseVignettes() after installing the package the normal way. However, after building, the tar.gz contains each pdf corresponding to a vignette twice: once in vignettes and once in inst/doc (which is obvious, when reading the Makefile). >From the reading of "Writing R Extensions" and other material, I cannot tell if that is a must or not, but I hope it is not since I wish to avoid that (my pdfs are large even once compressed). My problem is that when I delete either inst/doc or vignette just before calling the last command of the Makefile (Rscript -e "devtools::build(vignettes = FALSE)"), then browseVignettes() does not find the vignettes after a normal installation. If anyone knows of some _complete_ documentation about the ever troublesome topic of vignettes building in R, I would be very grateful too... Many thanks! Alex -- Alexandre Courtiol http://sites.google.com/site/alexandrecourtiol/home *"Science is the belief in the ignorance of experts"*, R. Feynman [[alternative HTML version deleted]] __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] vignettes present in 2 folders or won't work
Noted Duncan and TRUE... I cannot do more immediately unfortunately, that is always the issue of asking a last minute panic attack question before teaching a course involving the package... I do have /doc in my .Rbuildignore for reasons I can no longer remember... I will dig and create a MRE/reprex. The students will download heavy packages, but they probably won't notice. *Apologies* In the meantime, perhaps my question was clear enough to get clarity on: 1) whether having vignettes twice in foders inst/doc and vignettes is normal or not when vignettes are static. 2) where could anyone find a complete documentation on R vignettes since it is a recurring issue in this list and elsewhere. Many thanks On Sun, 1 Nov 2020 at 18:19, Duncan Murdoch wrote: > You are doing a lot of things that are non-standard, so I doubt if > anyone is going to be able to help you without access to a simple > reproducible example of a package that does what you do. Try to cut out > as much as you can to make it minimal. For example, > devtools::document() (indeed, most of your code) is probably irrelevant > to your problem with vignettes, but things like your .Rbuildignore file > are not. > > Duncan Murdoch > > On 01/11/2020 11:22 a.m., Alexandre Courtiol wrote: > > Dear all, > > > > I am struggling with an issue related to static vignettes: they work, but > > only when present in double in the tarball -- in the folder inst/doc and > > vignettes; see below for details. > > > > Details: > > > > I am pre-compiling heavy vignettes thanks to the vignette builder R.rsp. > > So basically, I have PDF files which I want the package to use as > Vignettes. > > > > For this, I have the following in my Description file: > > VignetteBuilder: R.rsp > > > > I am organising the vignette by hand using a Makefile (because this is > the > > only way that has proven 100% reliable to me, across a variety of > > situations). > > > > In my Makefile, I have something like: > > > > build: clean > >mkdir -p inst/doc > >mkdir vignettes > >-cp sources_vignettes/*/*.pdf* vignettes > >Rscript -e "tools::compactPDF(paths = 'vignettes', gs_quality = > > 'printer')" > >cp vignettes/*.pdf* inst/doc > >Rscript -e "devtools::document()" > >mkdir inst/extdata/sources_vignettes > >cp sources_vignettes/*/*.Rnw inst/extdata/sources_vignettes > >Rscript -e "devtools::build(vignettes = FALSE)" > > > > That works fine, the vignettes show up using browseVignettes() after > > installing the package the normal way. > > > > However, after building, the tar.gz contains each pdf corresponding to a > > vignette twice: once in vignettes and once in inst/doc (which is obvious, > > when reading the Makefile). > > > > From the reading of "Writing R Extensions" and other material, I cannot > > tell if that is a must or not, but I hope it is not since I wish to avoid > > that (my pdfs are large even once compressed). > > > > My problem is that when I delete either inst/doc or vignette just before > > calling the last command of the Makefile (Rscript -e > > "devtools::build(vignettes = FALSE)"), then browseVignettes() does not > find > > the vignettes after a normal installation. > > > > If anyone knows of some _complete_ documentation about the ever > troublesome > > topic of vignettes building in R, I would be very grateful too... > > > > Many thanks! > > > > Alex > > > > -- Alexandre Courtiol http://sites.google.com/site/alexandrecourtiol/home *"Science is the belief in the ignorance of experts"*, R. Feynman [[alternative HTML version deleted]] __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
[Rd] paths capability FALSE on devel?
Hi all, I don't know if it is a local issue on my hands or not, but after installing R-devel the output of grDevices::dev.capabilities()$paths is FALSE, while it is TRUE for R 4.3.3. Relatedly, I have issues with plotting paths on devel. At this stage, I simply would like to know if others running R devel and R 4.3.3 can replicate this behaviour and if there are obvious reasons why the observed change would be expected. Man thanks, Alex -- Alexandre Courtiol, www.datazoogang.de [[alternative HTML version deleted]] __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] paths capability FALSE on devel?
On Wed, 27 Mar 2024 at 12:19, Ivan Krylov wrote: > В Wed, 27 Mar 2024 11:28:17 +0100 > Alexandre Courtiol пишет: > > > after installing R-devel the output of > > grDevices::dev.capabilities()$paths is FALSE, while it is TRUE for R > > 4.3.3 > > Your system must be missing Cairo development headers, making x11() > fall back to type = 'Xlib': > > $ R-devel -q -s -e 'x11(); grDevices::dev.capabilities()$paths' > [1] TRUE > $ R-devel -q -s -e \ > 'x11(type="Xlib"); grDevices::dev.capabilities()$paths' > [1] FALSE > > If that's not the case and capabilities()['cairo'] is TRUE in your > build of R-devel, please show us the sessionInfo() from your build of > R-devel. > > -- > Best regards, > Ivan > Thanks everyone for your feedback. Here is the requested information: > x11() > grDevices::dev.capabilities()$paths [1] FALSE > capabilities()['cairo'] cairo TRUE > sessionInfo() R version 4.3.3 Patched (2024-02-29 r86166) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Ubuntu 22.04.4 LTS Matrix products: default BLAS: /home/courtiol/R-devel/lib/R/lib/libRblas.so LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0 locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_US.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C time zone: Europe/Berlin tzcode source: system (glibc) attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] compiler_4.3.3 However, since it works on your side, I think there is nothing to worry about, I must have simply failed to install R-devel properly. -- Alexandre Courtiol, www.datazoogang.de [[alternative HTML version deleted]] __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
[Rd] invalid comparison in numeric sequence (PR#13551)
Full_Name: alex Version: 2.8.1 OS: Ubuntu / MacOSX Submission from: (NULL) (162.38.183.51) > 0.6==0.6 [1] TRUE > seq(0,1,0.1)==0.4 [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE > seq(0,1,0.1)==0.6 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE > seq(0,1,0.1)==0.8 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE What is wrong with 0.6 ??? (TRUE is missing) I tried 3 differents computers (2 Ubuntu with R 2.8.1, and one Mac with R 2.8). __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel