Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在项目转移后保留有效的工作区引用。_R_Project_Directory Structure_Project Organization - Fatal编程技术网

R 在项目转移后保留有效的工作区引用。

R 在项目转移后保留有效的工作区引用。,r,project,directory-structure,project-organization,R,Project,Directory Structure,Project Organization,我一直在做一个R项目(projectA),我想把它交给一个同事,在脚本中处理工作区引用的最佳方法是什么?举例来说,让我们假设projectA由几个R脚本组成,每个脚本读取输入并将输出写入特定目录(dir)。所有目录都包含在我的本地dropbox中。脚本的I/O部分如下所示: # Script 1. # Give input and output names and dirs: dat1Dir <- "D:/Dropbox/ProjectA/source1/" dat1In

我一直在做一个R项目(projectA),我想把它交给一个同事,在脚本中处理工作区引用的最佳方法是什么?举例来说,让我们假设projectA由几个R脚本组成,每个脚本读取输入并将输出写入特定目录(dir)。所有目录都包含在我的本地dropbox中。脚本的I/O部分如下所示:

# Script 1. 
# Give input and output names and dirs:
dat1Dir       <- "D:/Dropbox/ProjectA/source1/"
dat1In        <- "foo1.asc"
dat2Dir       <- "D:/Dropbox/ProjectA/source2/"
dat2In        <- "foo2.asc"
outDir        <- "D:/Dropbox/ProjectA/output1/"
outName       <- "fooOut1.asc"
# Read data 
setwd(dat1Dir)
dat1          <- read.table(dat1In)
setwd(dat2Dir)
dat2          <- read.table(dat2In)
# do stuff with dat1 and dat2 that result in new data foo
# Write new data foo to file
setwd(outDir)
write.table(foo, outName)

# Script 2. 
# Give input and output names and dirs
dat1Dir       <- "D:/Dropbox/ProjectA/output1/"
dat1In        <- "fooOut1.asc"
outDir        <- "D:/Dropbox/ProjectA/output2/"
outName       <- "fooOut2.asc"
以便:

# At my own PC
dat1Dir       <- paste(FindDir(), "ProjectA/source1", sep= "")
> "D:/Dropbox/ProjectA/source1/"

# At my colleagues PC
dat1Dir       <- paste(FindDir(), "ProjectA/source1", sep= "")
> "C:Users/foo/my documents/ProjectA/source1/"
#在我自己的电脑上
dat1Dir“D:/Dropbox/ProjectA/source1/”
#在我的同事电脑上
dat1Dir“C:Users/foo/my documents/ProjectA/source1/”
或者也许有另一种方式?我们的工作IT基础设施目前不允许使用共享光盘。我将把助手函数放在一个“官方”R项目中(即,托管于),但我希望在需要许多I/O参数时使用脚本,因为代码可以很容易地查看和注释


非常感谢

您应该能够通过使用相对目录路径来实现这一点。这是我为Dropbox中的R项目所做的,我在Windows和OS X机器上编辑/运行这些项目,Dropbox文件夹分别为
D:/Dropbox
/Users/robin/Dropbox

要做到这一点,您需要

  • 使用
    setwd('/Users/robin/Dropbox;)
    (请参阅)在R中设置当前工作目录(在脚本的第一行中,或在运行前在控制台上以交互方式)

  • 将路径更改为相对路径,这意味着它们只包含来自当前目录的路径位,在本例中,如果将当前目录设置为Dropbox文件夹,则为
    'ProjectA/source1'
    位;如果将当前目录设置为ProjectA文件夹,则为
    'source1'
    (这是一个更好的主意)

  • 那么一切都应该正常运作


    你可能还对我喜欢的R库感兴趣——它为你提供了非常好的功能,可以为R中的这类工作制作独立的项目,而且它们完全是可复制的,可以在计算机之间移动,等等。我写了一篇可能有用的文章。

    Hi@robintw,谢谢你的回答。我已经使用R大约5年了,但我从未意识到
    setwd()
    中的路径可以相对于当前的
    getwd()
    。我总是把它们全部写下来。所以谢谢你指出这一点,我相信这会奏效的。
    # At my own PC
    dat1Dir       <- paste(FindDir(), "ProjectA/source1", sep= "")
    > "D:/Dropbox/ProjectA/source1/"
    
    # At my colleagues PC
    dat1Dir       <- paste(FindDir(), "ProjectA/source1", sep= "")
    > "C:Users/foo/my documents/ProjectA/source1/"