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 "" ________________________________ 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.