【问题标题】:R set working directory to folderR将工作目录设置为文件夹
【发布时间】:2015-04-17 12:17:14
【问题描述】:

我正在尝试将工作目录设置为函数中的不同子文件夹。我希望打印命令能够打印

C:/Users/Blah/Desktop/dir2/SUBFOLDER 

而是打印出来

C:/Users/Blah/Desktop/dir2

然而,当我在控制台中运行 dirs 时,我得到:

C:/Users/Blah/Desktop/dir2/SUBFOLDER 
...(Much longer list)

如我所料。这是我的代码:

temp<-function(path)
{
  print(path) #output is C:/Users/Blah/Desktop/dir2
  setwd(path)
  print(getwd())
  xml=xmlParse("filename.xml")
  ...
}

dirs<-list.dirs("C:/Users/Blah/Desktop/dir2")
lapply(dirs,temp)#apply function tempt to every item in dirs

【问题讨论】:

  • 我猜第一个目录是你指定的根目录。 lapply(dirs[-1],temp)呢?
  • 我不确切知道你看到的输出,但向量的第一个元素(运行dirs&lt;-list.dirs("C:/Users/Blah/Desktop/dir2" 之后)是当前目录,即在你的情况下为"C:/Users/Blah/Desktop/dir2"。因此,这是您的函数(然后是所有子文件夹)首先打印的那个。至少这是正常行为。

标签: r


【解决方案1】:

你检查过 list.dirs() 的可选参数吗? (https://stat.ethz.ch/R-manual/R-devel/library/base/html/list.files.html)

文档说,默认情况下,答案包括“路径”本身,因此您的函数 temp 将首先应用于您提供给 list.dirs()、“C:/Users/Blah/Desktop/dir2”的目录. 您可能想尝试使用 list.dirs("C:/Users/Blah/Desktop/dir2", recursive = FALSE) (如果可以满足您的要求)

【讨论】:

    【解决方案2】:

    你的问题很难理解。

    list.dirs 将返回(默认情况下)相对于当前工作目录的路径。

    如果更改工作目录,则相对路径将无效。

    您可以尝试在 list.dirs 中使用 full.names = TRUE 让您的 temp 函数将工作目录返回到其原始状态

    temp <- function(path) {
               owd <- getwd()
               on.exit(setwd(owd))
               print(path) 
               setwd(path)
             print(getwd())
        }
    

    一个更好的主意可能是,而不是弄乱工作目录,只需将适当的文件名传递给xmlParse(或您的函数正在执行的任何操作)

    files <- list.files(pattern = '\\.xml$', recurvise = TRUE)
    XML <-   lapply(files, xmlParse)
    

    【讨论】:

    • 在我的最终代码中,我按照您的建议进行了操作(而不是更改 setwd()),但 @davidrd 的解决方案正是我所需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-02-24
    • 2020-02-17
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多