目标是创建一个解析R脚本并列出函数的包(来自包 - 如mvbutils
- 但也包括导入)。
main函数依赖于解析R脚本
d<-getParseData(x = parse(text = deparse(x)))
例如在交互式R会话中输出
x<-test<-function(x){x+1}
d<-getParseData(x = parse(text = deparse(x)))
前几行:
line1 col1 line2 col2 id parent token terminal text
23 1 1 4 1 23 0 expr FALSE
1 1 1 1 8 1 23 FUNCTION TRUE function
2 1 10 1 10 2 23 '(' TRUE (
3 1 11 1 11 3 23 SYMBOL_FORMALS TRUE x
4 1 12 1 12 4 23 ')' TRUE )
当构建一个含有knitr
的插图 - 包含来自RStudio的knit html或devtools::build_vignettes
时,前一代码块的输出为NULL
。另一方面使用&#34; knitr :: knit&#34;在R会话中将给出正确的输出。
解析器是否有理由在knit
函数/环境中表现不同,有没有办法绕过它?
将代码更改为:
x<-test<-function(x){x+1}
d<-getParseData(x = parse(text = deparse(x),keep.source = TRUE))
解决了这个问题,但这并没有回答为什么同一个函数的行为方式不同的问题。
答案 0 :(得分:1)
从帮助页面?options
:
keep.source:
当
TRUE
时,函数的源代码(新定义或加载)存储在内部,允许将注释保存在正确的位置。通过打印或使用deparse(fn, control = "useSource")
来检索来源。默认值为
interactive()
,即TRUE
,供交互使用。
构建插图时,您正在运行非交互式R会话,因此源代码将在parse()
中被丢弃。
parse(file = "", n = NULL, text = NULL, prompt = "?",
keep.source = getOption("keep.source"), srcfile,
encoding = "unknown")