Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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 - Fatal编程技术网

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

从另一个R文件执行一组行,r,R,我不确定这是否可能,但我正在寻找类似于在R脚本中定义区域的东西。我想从另一个R脚本执行一组预先指定的行。我知道我可以使用source(filename)运行整个文件,但是我不想运行整个文件,我只想在文件中运行几行 我是否可以在文件中定义区域或任何类似内容,然后从另一个文件执行它 任何帮助都将不胜感激。考虑到行号在编辑过程中可以很容易地更改,这听起来不是一个超级安全的想法。似乎最安全的做法是将源代码较大的文件拆分为更小的部分,以便更安全地包含和运行。但你可以这样做 sourcePartial &l

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

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


任何帮助都将不胜感激。

考虑到行号在编辑过程中可以很容易地更改,这听起来不是一个超级安全的想法。似乎最安全的做法是将源代码较大的文件拆分为更小的部分,以便更安全地包含和运行。但你可以这样做

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)
}

将运行“test.R”中的第5-15行这听起来不是一个超级安全的想法,因为在编辑过程中行号可以很容易地更改。似乎最安全的做法是将源代码较大的文件拆分为更小的部分,以便更安全地包含和运行。但你可以这样做

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)
}

将运行“test.R”中的第5-15行如果您担心一旦您向上游添加新行,感兴趣的区域将发生变化,那么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)
}

sourcePartial如果您担心一旦您向上游添加新行,感兴趣的区域将发生变化,那么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)
}

sourcePartial我想,如果海报愿意将源文件分成带有通用(注释)标题标签的部分,比如
#header:Region_4
,你可以写一些更一般的东西,你可以通过一次阅读找到带有标题的行,然后根据名称或序列号选择目标部分。感谢你的回答,我认为广义版本更好。如果这是你想要的,最好在原始问题中描述它。另一个版本对文件内容做了更多的假设。我想,如果海报愿意将源文件分成带有通用(注释)标题标签的部分,比如
#header:Region_4
,你可以写一些更一般的东西,你可以通过一次阅读找到带有标题的行,然后根据名称或序列号选择目标部分。感谢你的回答,我认为广义版本更好。如果这是你想要的,最好在原始问题中描述它。另一个版本对文件内容做了更多的假设。似乎你应该编写R函数和构建包。似乎你应该编写R函数和构建包。这非常有效,正是我所寻找的,非常感谢。这非常有效,正是我所寻找的,非常感谢。