我正在尝试将工作目录设置为函数中的其他子文件夹。我希望打印命令打印
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
答案 0 :(得分:0)
你的问题很难理解。
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)
答案 1 :(得分:0)
你检查过list.dirs()的可选参数吗? (https://stat.ethz.ch/R-manual/R-devel/library/base/html/list.files.html)
文档说默认情况下,答案包括&#34;路径&#34;本身,所以你的函数temp将首先应用于你给list.dirs(),&#34; C:/ Users / Blah / Desktop / dir2&#34;的目录。 您可能想尝试使用list.dirs(&#34; C:/ Users / Blah / Desktop / dir2&#34;,recursive = FALSE)(如果它可以满足您的需求)