Why are you not simply double-clicking on 'TestPWD' and choosing to execute the file (don't add anything)? Are you executing the file from a terminal? ________________________________ De : Duncan Murdoch <murdoch.dun...@gmail.com> Envoyé : mercredi 10 octobre 2018 20:17 À : Olivier GIVAUDAN; Jeff Newmiller Cc : r-help@r-project.org Objet : Re: [R] Genuine relative paths with R
On 10/10/2018 3:51 PM, Olivier GIVAUDAN wrote: > Well, no idea... > > I just created a file 'TestPWD', made it executable, inserted in it > these lines and moved the file in various places: > > #!/bin/bash > > echo $PWD > read -p "" When I execute that, it prints my working directory. Doesn't matter where the TestPWD file is. If I put it in directory "foo", and change to foo's parent, then foo/TestPWD prints the name of the parent directory, not the foo directory. If I then add foo to the PATH, and run TestPWD I get the same thing. I find it unbelievable that you are seeing anything different from that on a Unix-alike. Duncan Muroch > ------------------------------------------------------------------------ > *De :* Duncan Murdoch <murdoch.dun...@gmail.com> > *Envoyé :* mercredi 10 octobre 2018 15:20 > *À :* Olivier GIVAUDAN; Jeff Newmiller > *Cc :* r-help@r-project.org > *Objet :* Re: [R] Genuine relative paths with R > On 10/10/2018 11:18 AM, Olivier GIVAUDAN wrote: >> Hi Duncan, >> >> Yes, if you need to display the content of $PWD you obviously need to >> type 'echo' before this variable. >> >> It prints the user's working directory if run from a terminal but if run >> from a bash file it prints the working directory of the script. >> At least for me (I am running on the last version of Ubuntu)... > > Not for me. Always prints the user's working directory. > > Duncan Murdoch > > >> >> Best regards, >> >> Olivier >> ------------------------------------------------------------------------ >> *De :* Duncan Murdoch <murdoch.dun...@gmail.com> >> *Envoyé :* mercredi 10 octobre 2018 14:51 >> *À :* Olivier GIVAUDAN; Jeff Newmiller >> *Cc :* r-help@r-project.org >> *Objet :* Re: [R] Genuine relative paths with R >> On 10/10/2018 10:37 AM, Olivier GIVAUDAN wrote: >>> Hi Jeff, >>> >>>> That is, there is not always a file in a particular directory even >>>> involved in the executing code. >>> >>> True. I'm only asking in the case where some R code is run from an R file. >>> This function 'MyOwnPath()' (say) should only work (i.e. return a useful >>> result) in this case. >>> >>>> The R interpreter does not make assumptions about where the code it is >>>> running came from. >>> >>> That's precisely the reproach I have in case the code comes from a file. >>> >>>> You also keep referring to "this feature" being in many languages, though >>>> you seem to be mistaken about most of them... >>> >>> 'Most of them' is largely exaggerated (plus I corrected myself): I only >>> mixed between the 'cd' variable / command in Windows and Linux shells (you >>> would certainly agree it's a bit vicious). >>> >>>> $PWD is the same as getwd() >>> >>> Wrong. As I already said, if I create an R script located somewhere on my >>> computer with the only line 'getwd()' and run this script, I won't get the >>> directory of this R script, contrary to a shell file with the only line >>> '$PWD'. >> >> What system are you talking about? On Unix-alikes, you'd need an "echo" >> ahead of that, and it would print the user's working directory, not the >> working directory of the script. >> >> Duncan Murdoch >> >>> >>>> __FILE__ in C relates to the source code directory that is usually not >>>> where the executable is located and may not even exist on the computer it >>>> is running on >>> >>> Yes, and? What is the issue here? So '__FILE__' does the job. Invoking >>> '__FILE__' in a .C file (I never said in its related executable) will >>> return the absolute path of this C source file. >>> '__DIR__' in PHP also does the job. No to forget the good old VBA (Excel in >>> this case) 'ActiveWorkbook.Path'. >>> >>> Thank you for the 2 references you provided. >>> However it seems that some manual settings are still required to be able to >>> use Rscript. >>> But I like the solution of the .RData file: I simply created an empty >>> .RData file at the root of my project and by double-clicking on this file >>> (as you said), the R GUI opens and 'getwd()' returns the path of this >>> .RData file. It seems to be a good alternative to .Rproj file to be opened >>> with RStudio. >>> >>>> However, by far the best approach is to teach your users to fish... if you >>>> give them an RStudio project directory they can double-click on the .Rproj >>>> file to set the current directory and enter the world of R. >>> >>> Yes, using an .Rproj file to be opened with RStudio also seems to me to be >>> a reasonable solution (the one I chose until now), although it is still a >>> workaround and requires RStudio. >>> Actually in this case, the package 'here' I previously mentioned is >>> useless to get the current working directory of the project as 'When a >>> project is opened within RStudio the following actions are taken: [...] The >>> current working directory is set to the project directory.', as stated on >>> this page: >> https://support.rstudio.com/hc/en-us/articles/200526207-Using-Projects. >>> So 'getwd()' returns exactly the same as 'here()' does. >>> >>> Best regards, >>> >>> Olivier >>> >>> ________________________________ >>> De : Jeff Newmiller <jdnew...@dcn.davis.ca.us> >>> Envoyé : dimanche 7 octobre 2018 20:48 >>> À : Olivier GIVAUDAN >>> Cc : Dénes Tóth; r-help@r-project.org >>> Objet : RE: [R] Genuine relative paths with R >>> >>> On Sun, 7 Oct 2018, Olivier GIVAUDAN wrote: >>> >>>> Hello Denes, >>>> >>>>> Yes, the path to the "root" folder of your project. You seem to have a >>>> really esoteric context if you want to run an R script without knowing >>>> its path in the file system. >>>> >>>> I don't have any esoteric context: I'm just looking for the most generic, >>>> automatic and reproducible solution. >>>> Of course you always know where an R script is located, nevertheless it >>>> doesn't imply you want to manually write its path in this >>>> R script. The issue is to have to hardcode an absolute path: I don't want >>>> that. >>>> >>>>> Because it is extremely rare that someone - who uses R for what it is >>>> worth and in a manner how R is supposed to be used - actually needs such >>>> a function. >>>> >>> >>>> First, the fact that it is rare doesn't mean this need is not legitimate >>>> and relevant: it is needed to make R projects fully movable (i.e. >>>> wherever you want). Second why a vast majority of languages does have >>>> this feature and not R? Why is it useful in these languages and not in >>>> R? >>> >>> The R interpreter does not make assumptions about where the code it is >>> running came from. You might be running it by using the source() function, >>> or by using the Rscript program, or by R CMD BATCH, or using eval() on >>> code you pasted together in an R function, or as byte-compiled code loaded >>> from an RData file. That is, there is not always a file in a particular >>> directory even involved in the executing code. >>> >>> You also keep referring to "this feature" being in many languages, though >>> you seem to be mistaken about most of them... in fact, they, too, know NOT >>> where the script is but where the current directory is ($PWD is the same >>> as getwd()) or where the compilation occurred (__FILE__ in C relates to >>> the source code directory that is usually not where the executable is >>> located and may not even exist on the computer it is running on). >>> >>> I have already pointed out that the solution is to let the OS set the >>> current directory. If you want the user to have access to R independent of >>> your code, the easiest way to leave them in Rgui after your code is done >>> is to use save.image() to create a "myApp.RData" file which can be >>> double-clicked [1]. The double-clicking action by default (as defined by >>> the installation of R) causes the operating system to set the current >>> directory to the one containing the file you double-clicked on and then >>> executes the Rgui program. >>> >>> If you don't want the user to interact with your session, you can use the >>> Rscript executable (also mentioned briefly at the bottom of [1]). In both >>> cases, the user has (unknowingly) set the current directory before running >>> your code, and there is no need to encode where the script is or was >>> inside the script. >>> >>> You can also create a windows shortcut to invoke Rscript yourself by >>> bootstrapping the RData file and invoking the >>> R.utils::createWindowsShortcut() [2] function. >>> >>> However, by far the best approach is to teach your users to fish... if you >>> give them an RStudio project directory they can double-click on the .Rproj >>> file to set the current directory and enter the world of R. >>> >>> [1] >>> https://www.r-bloggers.com/look-ma-no-typing-autorunning-code-on-r-startup/ >>> [2] https://cran.r-project.org/web/packages/R.utils/R.utils.pdf >>> >>> End comment. >>> >>>> Best regards, >>>> >>>> Olivier >>>> >>>> _________________________________________________________________________________________________________________________________ >>>> De : D?nes T?th <toth.de...@kogentum.hu> >>>> Envoy? : samedi 6 octobre 2018 23:36 >>>> ? : Olivier GIVAUDAN; Jeff Newmiller; r-help@r-project.org >>>> Objet : Re: [R] Genuine relative paths with R >>>> Hi Olivier, >>>> >>>> >>>> On 10/07/2018 01:13 AM, Olivier GIVAUDAN wrote: >>>>> Hi Denes, >>>>> >>>>> Thank you for the possibility you shared: unfortunately it still uses >>>>> one hardcoded absolute path which I want to avoid. >>>> >>>> Yes, the path to the "root" folder of your project. You seem to have a >>>> really esoteric context if you want to run an R script without knowing >>>> its path in the file system. >>>> >>>>> >>>>> I just think that the solutions suggested are too complicated for my >>>>> simple need. >>>>> >>>>> The root cause being that R doesn't seem to have the Windows batch >>>>> equivalent of cd, or bash equivalent of $PWD, or PHP equivalent of >>>>> __DIR__. >>>>> Hence the workarounds we are discussing. >>>>> >>>>> And finally we go back to my initial question: if such a function >>>>> doesn't exist in R, what are the reasons? >>>> >>>> Because it is extremely rare that someone - who uses R for what it is >>>> worth and in a manner how R is supposed to be used - actually needs such >>>> a function. >>>> >>>> Best, >>>> Denes >>>> >>>> >>>> >>>>> >>>>> Best regards, >>>>> >>>>> Olivier >>>>> ------------------------------------------------------------------------ >>>>> *De :* D?nes T?th <toth.de...@kogentum.hu> >>>>> *Envoy? :* samedi 6 octobre 2018 23:05 >>>>> *?:* Olivier GIVAUDAN; Jeff Newmiller; r-help@r-project.org >>>>> *Objet :* Re: [R] Genuine relative paths with R >>>>> Hi Olivier, >>>>> >>>>> I really think that Ista and Jeff gave you plenty of useful options how >>>>> you can avoid using absolute paths. >>>>> >>>>> One more possibility: you can use `source()` with the chdir = TRUE >>>>> argument (see ?source). If you have a master script which sources other >>>>> files which are located in a fixed hierarchy relative to the location of >>>>> the master script, the only time when you have to use an absolute path >>>>> is when you source your master script, e.g.: >>>>> source("/my/path/to/master.R", chdir = TRUE) >>>>> >>>>> Inside the master script, you can then source the other scripts by >>>>> relative paths, define your 'data' folders relative to the master script >>>>> and let the other scripts use those data paths, etc. >>>>> >>>>> Best, >>>>> Denes >>>>> >>>>> >>>>> On 10/06/2018 11:36 PM, Olivier GIVAUDAN wrote: >>>>>> Hi Jeff, >>>>>> >>>>>> Thanks for sharing your workaround. >>>>>> >>>>>> I guess my last answer to Ista answers your question as well. >>>>>> >>>>>> To me this function (an equivalent of 'cd', say) should be >>>>>> platform-independent. >>>>>> >>>>>> Best regards, >>>>>> >>>>>> Olivier >>>>>> >>>>>> ________________________________ >>>>>> De : Jeff Newmiller <jdnew...@dcn.davis.ca.us> >>>>>> Envoy??? : samedi 6 octobre 2018 19:31 >>>>>> ??? : r-help@r-project.org; Olivier GIVAUDAN; r-help@r-project.org >>>>>> Objet : Re: [R] Genuine relative paths with R >>>>>> >>>>>> I stopped using hardcoded absolute paths inside R scripts years ago, and >>>>>> I suspect that is fairly common practice. That is, I >>>> almost never enter a path starting with "/" or "c:/" in an R script. >>>>>> >>>>>> The key concession you have to make is to start your R session in your >>>>>> working directory using OS-specific mechanisms, and >>>> then reference your code and data relative to that directory. RStudio >>>> project files offer one mechanism for doing this; using CD >>>> from the OS command line is another, and using the file-browser >>>>> double-click mechanism on .RData files is another (though I prefer to >>>>> avoid that these days due to potential global environment contamination). >>>>>> >>>>>> Perhaps you can be more specific about what facilities you are expecting >>>>>> to find. You should also mention what OS you >>>> typically use and how you normally start R. >>>>>> >>>>>> On October 6, 2018 4:48:44 AM PDT, Olivier GIVAUDAN >>>>>> <olivier_givau...@hotmail.com> wrote: >>>>>>> Dear R users, >>>>>>> >>>>>>> I would like to work with genuine relative paths in R for obvious >>>>>>> reasons: if I move all my scripts related to some project as a whole to >>>>>>> another location of my computer or someone else's computer, if want my >>>>>>> scripts to continue to run seamlessly. >>>>>>> >>>>>>> What I mean by "genuine" is that it should not be necessary to hardcode >>>>>>> one single absolute path (making the code obviously not "portable" - to >>>>>>> another place - anymore). >>>>>>> >>>>>>> For the time being, I found the following related posts, unfortunately >>>>>>> never conclusive or even somewhat off-topic: >>>>>>> https://stackoverflow.com/questions/1815606/rscript-determine-path-of-the-executing-script >>>>>>> https://stackoverflow.com/questions/47044068/get-the-path-of-current-script/47045368 >>>>>>> http://r.789695.n4.nabble.com/Script-auto-detecting-its-own-path-td2719676.html >>>>>>> >>>>>>> So I found 2 workarounds, more or less satisfactory: >>>>>>> >>>>>>> >>>>>>> 1. Either create a variable "ScriptPath" in the first lines of each of >>>>>>> my R scripts and run a batch (or shell, etc.) to replace every single >>>>>>> occurrence of "ScriptPath <-" by "ScriptPath <- [Absolute path of the R >>>>>>> script]" in all the R scripts located in the folder (and possibly >>>>>>> subfolders) of the batch file. >>>>>>> 2. Or create an R project file with RStudio and use the package "here" >>>>>>> to get the absolute path of the R project file and put all the R >>>>>>> scripts related to this project in the R project directory, as often >>>>>>> recommended. >>>>>>> >>>>>>> But I am really wondering why R doesn't have (please tell me if I'm >>>>>>> wrong) this basic feature as many other languages have it (batch, >>>>>>> shell, C, LaTeX, SAS with macro-variables, etc.)? >>>>>>> Do you know whether the language will have this kind of function in a >>>>>>> near future? What are the obstacles / what is the reasoning for not >>>>>>> having it already? >>>>>>> >>>>>>> Do you know other workarounds? >>>>>>> >>>>>>> Best regards, >>>>>>> >>>>>>> Olivier >>>>>>> >>>>>>> [[alternative HTML version deleted]] >>>>>>> >>>>>>> ______________________________________________ >>>>>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help >>>>>>> PLEASE do read the posting guide >>>>>>> http://www.R-project.org/posting-guide.html >>>>>>> and provide commented, minimal, self-contained, reproducible code. >>>>>> >>>>>> -- >>>>>> Sent from my phone. Please excuse my brevity. >>>>>> >>>>>> [[alternative HTML version deleted]] >>>>>> >>>>>> >>>>>> >>>>>> ______________________________________________ >>>>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >>>>>> https://stat.ethz.ch/mailman/listinfo/r-help >>>>>> PLEASE do read the posting guide >>>>>> http://www.R-project.org/posting-guide.html >>>>>> and provide commented, minimal, self-contained, reproducible code. >>>>>> >>>> >>>> >>> >>> --------------------------------------------------------------------------- >>> Jeff Newmiller The ..... ..... Go Live... >>> DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... >>> Live: OO#.. Dead: OO#.. Playing >>> Research Engineer (Solar/Batteries O.O#. #.O#. with >>> /Software/Embedded Controllers) .OO#. .OO#. rocks...1k >>> --------------------------------------------------------------------------- >>> >>> [[alternative HTML version deleted]] >>> >>> ______________________________________________ >>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >>> >> > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.