我在这里看到了很多相关的答案,但我没有找到一个正确的方法来解决我在windows系统下的问题...
我知道链接the similar question
我得到setwd()
可以找到我想要的目录,但是,我的R脚本可能会移动到另一个目录而不做任何修改,所以我想知道当前的文件目录,因为有类似source(...)
的表达式,这个叫做源文件和R项目中同一个父目录下的执行文件,怎么办?
任何帮助表示感谢。
答案 0 :(得分:2)
您可以使用getwd()
功能获取当前目录并为其命名,例如:
cpath = getwd()
另一个有用的功能是file.path
,它可以帮助您使用简单的语法指定新目录。例如,您希望获取当前目录“上”一级的目录,您可以使用:
upp.dir = file.path("..", "cpath")
这会将upp.dir
设为"../Your_Current_Dir"
。如何更改到当前目录中的另一个文件夹(称为Folder_A)?使用:
folderA = file.path("cpath", "Folder_A")
这些可以帮助您轻松浏览文件系统。
答案 1 :(得分:0)
基本上,如果您编写脚本并且这些脚本取决于它们的位置,那么您就是在做错了。
在包中编写代码。参数化功能使它们普遍适用。如果您有包含数据的文件夹,则将其中一个参数作为文件夹。
使用source()
调用的脚本无法可靠地找到自己,但这应该不是问题,因为 WHATVER CALLED THE SCRIPT 知道脚本在哪里(它必须或如何否则它可以调用吗?)所以它可以将其作为参数传递。类似的东西:
> youarehere = "C:\foo\"
> source("C:\foo\bar.R")
现在bar.R
可以执行setwd(youarehere)
并且它可以正常工作,即使它编写得很糟糕,以至于它依赖于在其包含文件夹中获取其他代码。
或者你可以这样做:
> setwd(youarehere)
> source("bar.R")
在您的通话功能中。
但实际上,这是一个失败,它是代码编写错误的标志。使用函数,编写包,使用devtools,它真的不那么难,然后你的代码可以在任何地方工作,你不会编写愚蠢的脚本,这是source()
调用的曲折迷宫。
保持优雅。