Bug report: R.home() cause package Rcpp failed executing sourceCpp, similar bug are labeled "BUG 16660" since 2016 and here I could provide a solution that tested in my laptop.

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Bug report: R.home() cause package Rcpp failed executing sourceCpp, similar bug are labeled "BUG 16660" since 2016 and here I could provide a solution that tested in my laptop.

qweytr1
https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=16660
Here is the bug, which R.home may generate a path contains a whitespace.


this will cause Rcpp failed executing sourceCpp


> sourceCpp("b:/2018-12-14/src/18020/MCMC.cpp")
Error in system(cmd, intern = !showOutput) : 'D:/Program' not found
Error in system(cmd, ignore.stderr = TRUE, intern = TRUE) :
  'D:/Program' not found



Code is tested in both R 3.5.1 and Microsoft R Open 3.5.1.


I find a temp solution, is to copy such words into Rprofile:


unlockBinding("R.home", baseenv())
utils::assignInNamespace("R.home",function (component = "home")
{
    rh <- .Internal(R.home())
    paste0('"',switch(component, home = rh, bin = if (.Platform$OS.type ==
        "windows" && nzchar(p <- .Platform$r_arch)) file.path(rh,
        component, p) else file.path(rh, component), share = if (nzchar(p <- Sys.getenv("R_SHARE_DIR"))) p else file.path(rh,
        component), doc = if (nzchar(p <- Sys.getenv("R_DOC_DIR"))) p else file.path(rh,
        component), include = if (nzchar(p <- Sys.getenv("R_INCLUDE_DIR"))) p else file.path(rh,
        component), modules = if (nzchar(p <- .Platform$r_arch)) file.path(rh,
        component, p) else file.path(rh, component), file.path(rh,
        component)),'"')
}, ns="base", envir=baseenv())
lockBinding("R.home", baseenv())


Actually, calling "D:/Program Files/R/R Open/bin/x64"/R is same to calling "D:/Program Files/R/R Open/bin/x64/R"


it shows that we could use quote to quote the whitespaces.


(although the code seems a little bit ugly)



               _                          
platform       x86_64-w64-mingw32        
arch           x86_64                    
os             mingw32                    
system         x86_64, mingw32            
status                                    
major          3                          
minor          5.1                        
year           2018                      
month          07                        
day            02                        
svn rev        74947                      
language       R                          
version.string R version 3.5.1 (2018-07-02)
nickname       Feather Spray      







        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Bug report: R.home() cause package Rcpp failed executing sourceCpp, similar bug are labeled "BUG 16660" since 2016 and here I could provide a solution that tested in my laptop.

Dirk Eddelbuettel

The short answer, supported (if memory serves) by the R Windows FAQ, is to
_not_ install in a path with spaces in the first place.

Pondering why R on Windows, after all these years, still uses a path with
spaces as the default choice is left as exercise to the reader.

Dirk

--
http://dirk.eddelbuettel.com | @eddelbuettel | [hidden email]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Bug report: R.home() cause package Rcpp failed executing sourceCpp, similar bug are labeled "BUG 16660" since 2016 and here I could provide a solution that tested in my laptop.

Tomas Kalibera
In reply to this post by qweytr1

To resolve this issue quickly on your side, I would recommend installing
R on the C: drive which should have the short file names enabled by
default. Then, R.home() will return a path name without a space (short
file names do not include a space).

If you for some reason need to install R on the D: drive, then it might
be easiest to choose installation directory without the space, such as
"D:/R". Alternatively, you can enable short file names on your D: drive.

---

Re what could/should be fixed. I think code in R and packages should be
robust against space in file names, it should properly quote the file
names before passing to the OS. If you can debug this issue down to the
place where quoting (e.g. via shQuote) is missing, I'd be happy to fix
if it is in R code, please submit a bug report/patch. If it is in Rcpp
or other package you may contribute a patch/ask the package maintainer
to fix.

Best
Tomas


On 12/21/18 7:34 PM, [hidden email] wrote:

> https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=16660
> Here is the bug, which R.home may generate a path contains a whitespace.
>
>
> this will cause Rcpp failed executing sourceCpp
>
>
>> sourceCpp("b:/2018-12-14/src/18020/MCMC.cpp")
> Error in system(cmd, intern = !showOutput) : 'D:/Program' not found
> Error in system(cmd, ignore.stderr = TRUE, intern = TRUE) :
>    'D:/Program' not found
>
>
>
> Code is tested in both R 3.5.1 and Microsoft R Open 3.5.1.
>
>
> I find a temp solution, is to copy such words into Rprofile:
>
>
> unlockBinding("R.home", baseenv())
> utils::assignInNamespace("R.home",function (component = "home")
> {
>      rh <- .Internal(R.home())
>      paste0('"',switch(component, home = rh, bin = if (.Platform$OS.type ==
>          "windows" && nzchar(p <- .Platform$r_arch)) file.path(rh,
>          component, p) else file.path(rh, component), share = if (nzchar(p <- Sys.getenv("R_SHARE_DIR"))) p else file.path(rh,
>          component), doc = if (nzchar(p <- Sys.getenv("R_DOC_DIR"))) p else file.path(rh,
>          component), include = if (nzchar(p <- Sys.getenv("R_INCLUDE_DIR"))) p else file.path(rh,
>          component), modules = if (nzchar(p <- .Platform$r_arch)) file.path(rh,
>          component, p) else file.path(rh, component), file.path(rh,
>          component)),'"')
> }, ns="base", envir=baseenv())
> lockBinding("R.home", baseenv())
>
>
> Actually, calling "D:/Program Files/R/R Open/bin/x64"/R is same to calling "D:/Program Files/R/R Open/bin/x64/R"
>
>
> it shows that we could use quote to quote the whitespaces.
>
>
> (although the code seems a little bit ugly)
>
>
>
>                 _
> platform       x86_64-w64-mingw32
> arch           x86_64
> os             mingw32
> system         x86_64, mingw32
> status
> major          3
> minor          5.1
> year           2018
> month          07
> day            02
> svn rev        74947
> language       R
> version.string R version 3.5.1 (2018-07-02)
> nickname       Feather Spray
>
>
>
>
>
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel