I've been working on a small personal project that needs to select files for manipulation from various directories and move them around in planned ways. file.choose() is a nice way to select files. However, I've noticed that if file.choose() is called within a function, it is the directory from which that calling function has been invoked that is displayed by file.choose(). This is not altered if I setwd() within that function. Have I misunderstood something or is this an infelicity of file.choose(). sessionInfo() gives my system as R version 4.4.2 (2024-10-31) Platform: x86_64-pc-linux-gnu Running under: Linux Mint 22 I've a small example script. It actually helps to create nd1 and nd2 and give them some dummy files before testing. Suggestions welcome. John Nash # fcdir.R -- show directory being used by function that calls file choose cpath<-getwd() nd1<-paste0(cpath,"/nd1") nd2<-paste0(cpath,"/nd2") dir.create(nd1) dir.create(nd2) myfc<-function(){ cat("myfc working in ",getwd(),"\n") val<-file.choose() val } myfcd<-function(adir){ setwd(adir) cat("in myfcd, getwd() =", getwd(),"\n") val<-file.choose() val } print(getwd()) one<-myfc() cat("one=",one,"\n") setwd("nd1") print(getwd()) two<-myfc() # This opens file.choose() in nd1 cat("two=",two,"\n") setwd("..") print(getwd()) three<-myfcd("nd2") # But this does not cat("three=",three,"\n")
Gabor Grothendieck
2024-Dec-18 16:02 UTC
[R] Query concerning working directory for file.choose()
Try choose.files choose.files(default = file.path(mydir, "*.*"), multi = FALSE) On Wed, Dec 18, 2024 at 10:33?AM J C Nash <profjcnash at gmail.com> wrote:> > I've been working on a small personal project that needs to select files for manipulation from > various directories and move them around in planned ways. file.choose() is a nice way to select > files. However, I've noticed that if file.choose() is called within a function, it is the > directory from which that calling function has been invoked that is displayed by file.choose(). > > This is not altered if I setwd() within that function. Have I misunderstood something or is this > an infelicity of file.choose(). sessionInfo() gives my system as > R version 4.4.2 (2024-10-31) > Platform: x86_64-pc-linux-gnu > Running under: Linux Mint 22 > > I've a small example script. It actually helps to create nd1 and nd2 and give them some dummy > files before testing. > > Suggestions welcome. > > John Nash > > > # fcdir.R -- show directory being used by function that calls file choose > cpath<-getwd() > nd1<-paste0(cpath,"/nd1") > nd2<-paste0(cpath,"/nd2") > dir.create(nd1) > dir.create(nd2) > > myfc<-function(){ > cat("myfc working in ",getwd(),"\n") > val<-file.choose() > val > } > myfcd<-function(adir){ > setwd(adir) > cat("in myfcd, getwd() =", getwd(),"\n") > val<-file.choose() > val > } > > print(getwd()) > one<-myfc() > cat("one=",one,"\n") > setwd("nd1") > print(getwd()) > two<-myfc() # This opens file.choose() in nd1 > cat("two=",two,"\n") > setwd("..") > print(getwd()) > three<-myfcd("nd2") # But this does not > cat("three=",three,"\n") > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide https://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.-- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com
Duncan Murdoch
2024-Dec-18 18:39 UTC
[R] Query concerning working directory for file.choose()
I believe file.choose() remembers the last choice, and repeats that location the next time you call it. This is true when it is called at top level or from within a function. The first time you call it in a session, it will default to the current working directory, but not after that. Front ends are allowed to replace the underlying function, so that may depend on which front end you are using. I'm talking about R.app on a Mac. Duncan Murdoch On 2024-12-18 10:32 a.m., J C Nash wrote:> I've been working on a small personal project that needs to select files for manipulation from > various directories and move them around in planned ways. file.choose() is a nice way to select > files. However, I've noticed that if file.choose() is called within a function, it is the > directory from which that calling function has been invoked that is displayed by file.choose(). > > This is not altered if I setwd() within that function. Have I misunderstood something or is this > an infelicity of file.choose(). sessionInfo() gives my system as > R version 4.4.2 (2024-10-31) > Platform: x86_64-pc-linux-gnu > Running under: Linux Mint 22 > > I've a small example script. It actually helps to create nd1 and nd2 and give them some dummy > files before testing. > > Suggestions welcome. > > John Nash > > > # fcdir.R -- show directory being used by function that calls file choose > cpath<-getwd() > nd1<-paste0(cpath,"/nd1") > nd2<-paste0(cpath,"/nd2") > dir.create(nd1) > dir.create(nd2) > > myfc<-function(){ > cat("myfc working in ",getwd(),"\n") > val<-file.choose() > val > } > myfcd<-function(adir){ > setwd(adir) > cat("in myfcd, getwd() =", getwd(),"\n") > val<-file.choose() > val > } > > print(getwd()) > one<-myfc() > cat("one=",one,"\n") > setwd("nd1") > print(getwd()) > two<-myfc() # This opens file.choose() in nd1 > cat("two=",two,"\n") > setwd("..") > print(getwd()) > three<-myfcd("nd2") # But this does not > cat("three=",three,"\n") > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide https://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.