将R脚本从非交互式切换到交互式

Dar*_*ook 20 r

我有一个R脚本,它接受命令行参数,其中顶行是:

#!/usr/bin/Rscript --slave
Run Code Online (Sandbox Code Playgroud)

我想中断函数中的执行(因此我可以交互式地使用由该点加载的数据变量来计算我需要编写的下一部分代码).我在有问题的函数中添加了这个:

browser()
Run Code Online (Sandbox Code Playgroud)

但它被忽略了.一些搜索表明它可能是因为程序在非交互模式下运行.但是更多的搜索没有追踪我如何将脚本切换到非交互模式,以便浏览器()可以工作.像browser_yes_I_really_mean_it()功能一样的东西.

PS我想尽可能避免改变脚本的其余部分.我目前的方法是将准备数据所需的代码块复制并粘贴到交互式会话中; 但随着脚本变得越来越复杂,这变得越来越不合理.

更新:对于有同样问题的其他人来说,实际问题的答案似乎是不可能的.一旦你以非交互模式启动R,就会抛出骰子.因此,给定的答案是变通方法:要么你破解你的代码(记得以后再破解它),要么重构以使调试更容易.(此评论不是对答案的批评;建议的重构无论如何都会使代码更清晰.)

mds*_*ner 21

你可以启动R并获取源文件吗?

R
source("script.R")
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,能够启动R并拥有像--SOURCE"source.R"这样的命令行参数将会很有用,它与手动输入TYPE CRAP一样.我们是程序员还是我们的秘书? (3认同)

Dar*_*ook 5

在mdsumner的回答之后,我编辑了我的脚本:

if(!exists("argv")){
    argv=commandArgs(TRUE)
    if(length(argv)!=4)usage_and_exit()
    }else{
    if(length(argv)!=4){
        stop("Must set argv as a 4 element vector. E.g. argv=c(...)")
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后不需要其他更改,我能够做到:

R
> argv=c('a','b','c','d')
> source("script.R")
Run Code Online (Sandbox Code Playgroud)