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)... 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.