相关疑难解决方法(0)

Rscript:确定执行脚本的路径

我有一个名为的脚本foo.R包含另一个脚本other.R,该脚本位于同一目录中:

#!/usr/bin/env Rscript
message("Hello")
source("other.R")
Run Code Online (Sandbox Code Playgroud)

但我想R发现other.R无论当前的工作目录是什么.

换句话说,foo.R需要知道自己的路径.我怎样才能做到这一点?

r file path rscript r-faq

234
推荐指数
14
解决办法
11万
查看次数

R命令用于在Rstudio中将工作目录设置为源文件位置

我正在研究R中的一些教程.每个R代码都包含在一个特定的文件夹中.那里有数据文件和其他文件.我想打开.r文件并获取它,这样我就不必更改Rstudio中的工作目录,如下所示:

在此输入图像描述

有没有办法在R中自动指定我的工作目录

automation r working-directory

118
推荐指数
10
解决办法
9万
查看次数

获取当前脚本的路径

我想以编程方式将工作目录设置为当前脚本的路径,但首先我需要获取当前脚本的路径.

所以我希望能够做到:

current_path = ...retrieve the path of current script ...
setwd(current_path) 
Run Code Online (Sandbox Code Playgroud)

就像RStudio菜单一样: RStudio设置工作目录

到目前为止我试过:

initial.options <- commandArgs(trailingOnly = FALSE)
file.arg.name <- "--file="
script.name <- sub(file.arg.name, "", initial.options[grep(file.arg.name, initial.options)])
script.basename <- dirname(script.name)
Run Code Online (Sandbox Code Playgroud)

script.name 返回NULL

source("script.R", chdir = TRUE)
Run Code Online (Sandbox Code Playgroud)

返回:文件中的错误(文件名,"r",编码=编码):无法打开连接另外:警告消息:在文件中(文件名,"r",编码=编码):无法打开文件'/script.R' : 没有相应的文件和目录

dirname(parent.frame(2)$ofile)
Run Code Online (Sandbox Code Playgroud)

返回:dirname中的错误(parent.frame(2)$ ofile):期望的字符向量参数 ...因为parent.frame为null

frame_files <- lapply(sys.frames(), function(x) x$ofile)
frame_files <- Filter(Negate(is.null), frame_files)
PATH <- dirname(frame_files[[length(frame_files)]])
Run Code Online (Sandbox Code Playgroud)

返回:Null,因为frame_files是0的列表

thisFile <- function() {
    cmdArgs <- commandArgs(trailingOnly = FALSE)
    needle <- "--file="
    match <- grep(needle, cmdArgs)
    if (length(match) > 0) …
Run Code Online (Sandbox Code Playgroud)

r rstudio

25
推荐指数
6
解决办法
3万
查看次数

查找当前.R文件的位置

我已经查看了许多与此相似的问题(见帖子末尾),但我没有找到任何实际完成我需要的解决方案.我根据项目在Windows或Fedora上编码,我为使用Windows和几个Linux发行版的人编写代码.

我的部分工作是为自动分析数据和创建图形的人制作R脚本.最常见的是,我只是向他们发送脚本,它将生成图表.这样,如果数据发生变化或扩展,我不需要为它们重新运行脚本(也可以根据需要进行更改).

问题是我不知道如何获得一个R脚本来找出它自己的位置.能够创建如下工作的代码将非常方便:

  1. 用户将脚本保存到包含数据的文件夹,然后运行脚本.
    • 我通常只是将脚本通过电子邮件发送给我正在使用的人.
    • 他们将脚本保存到包含他们想要分析/绘制的数据的文件夹中.
    • 理想情况下,他们只需启动R,加载脚本,然后运行脚本.
  2. 脚本确定自己的位置,然后将其设置为工作目录.
  3. 脚本分析其自己目录中的数据.
  4. 脚本生成图形并将其保存到自己的目录中.

这个问题只涉及第2步.只要我能做到这一点,其他所有事情都会顺利进行.有这样的东西会很高兴:

setwd(FindThisScriptsLocation())
Run Code Online (Sandbox Code Playgroud)

该行:源(...,CHDIR = T)已建议在这里,但它不能被用于一个脚本来引用自身,除非它知道自己的路.

以下是一些相关问题:

r

19
推荐指数
2
解决办法
2万
查看次数

获取`source`d文件的文件名和路径

sourced或Sweaved文件如何找到自己的路径?

背景:

我使用.R脚本或.Rnw文件工作了很多.我的项目是在一个目录结构中组织的,但是项目基本目录的路径经常在不同的计算机之间变化(例如,因为我只为其他人做了部分数据分析,他们的目录结构与我的不同:我有项目基目录〜/ Projects/StudentName /或〜/ Projects/Studentname/Projectname和大多数只拥有一个项目的学生通常在〜/ Measurements /或〜/ DataAnalysis /或类似的东西下 - 这对我不起作用).

所以像一条线

    setwd (my.own.path ()) 
Run Code Online (Sandbox Code Playgroud)

将是非常有用的,因为它将允许确保工作目录是项目的基本路径,无论该项目实际在哪里.无需用户必须考虑设置工作目录.

让我澄清一下:我寻找的解决方案可以按下不假思索的用户的编辑器/ IDE sourceSweave键盘快捷键.

r sweave

18
推荐指数
2
解决办法
2万
查看次数

R中的相对路径:如何避免我的计算机被点燃?

不久前,我正在阅读一篇关于改进项目工作流程的文章。建议不要使用setwd,否则我的电脑会烧毁:

如果 R 脚本的第一行是

setwd("C:\Users\jenny\path\that\only\I\have")

我会进入你的办公室并点燃你的计算机。

我开始使用这个here包,它运行得很好,直到我开始使用cronR. 问完这个问题后,我的笔记本电脑再次受到纵火威胁:

如果你的 #rstats 脚本的第一行是 wd <- here(),我将进入你的实验室并点燃你的计算机。

由于担心笔记本电脑的安全,我开始使用答案中建议的方法来获取相对文件路径:

wd <- Sys.getenv("HOME")
wd <- file.path(wd, "projects", "my_proj") 
Run Code Online (Sandbox Code Playgroud)

这对我有用,但对与我一起工作但没有相同projects目录的人不起作用。所以现在我很困惑。获取相对文件路径以便项目可以移植的最安全/最好的方法是什么?

有很多选项:12。我的要求是获取函数/脚本并读取/写入 csv 文件。也许rprojroot套餐是最好的选择?

r

5
推荐指数
1
解决办法
2910
查看次数

执行后复制脚本

是否有可能将执行的行或基本上的脚本复制到工作目录中?

所以我的正常情况是,我有一个独立的脚本,只需要在工作目录中获取,他们将完成我需要的一切.几个月后,我对这些脚本进行了更新,我希望在执行源代码时从脚本中获取快照...

所以基本上file.copy(ITSELF, '.')或类似的东西.

r

4
推荐指数
1
解决办法
469
查看次数

标签 统计

r ×7

automation ×1

file ×1

path ×1

r-faq ×1

rscript ×1

rstudio ×1

sweave ×1

working-directory ×1