从另一个R文件执行一组行

时间:2014-10-07 21:23:10

标签: r

我不确定这是否可能,但我正在寻找类似于在R脚本中定义区域的东西。我想从另一个R脚本执行一组预先指定的行。我知道我可以使用source(filename)运行整个文件,但我不想运行整个文件,而只想在文件中运行几行。

我是否可以在文件中定义regions或类似内容,然后从另一个文件执行它?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:11)

如果您担心感兴趣的区域会在您向上游添加新行后转移,那么MrFlick的答案的替代(或略微修改)版本将被理解为:

sourcePartial <- function(fn,startTag='#from here',endTag='#to here') {
  lines <- scan(fn, what=character(), sep="\n", quiet=TRUE)
  st<-grep(startTag,lines)
  en<-grep(endTag,lines)
  tc <- textConnection(lines[(st+1):(en-1)])
  source(tc)
  close(tc)
}

现在,您需要在感兴趣区域的上方和下方放置一个小的,唯一的哈希标记。比如&#34; #from here&#34;和&#34; #to here&#34;

答案 1 :(得分:3)

考虑到编辑过程中线号可以轻松改变,这听起来并不是一个超级安全的想法。似乎最安全的做法是将较大的源文件拆分为更安全的包含和运行的较小部分。但是你可以做这样的事情

sourcePartial <- function(fn, skip=0, n=-1) {
    lines <- scan(fn, what=character(), sep="\n", skip=skip, n=n, quiet=TRUE)
    tc <- textConnection(lines)
    source(tc)
    close(tc)
}

这里我们使用scan()来读取文件中的行。请参阅skip=上的n=?scan的文档,了解如何跳过一定数量的行并在某个数字后停止阅读。所以

sourcePartial("test.R", 4, 11)

将从&#34; test.R&#34;

开始第5-15行