【发布时间】:2021-02-24 23:34:54
【问题描述】:
我正在尝试使用diagrammeR::grViz 创建一个基于输入输出图形的函数,但grViz 函数不能替换我函数中的参数。这是一个基本示例:
library(DiagrammeR)
foo <- function(insert_text_here){
text_to_show <- insert_text_here
DiagrammeR::grViz("digraph {
graph [layout = dot, rankdir = LR]
node [shape = rectangle, fixedsize = true, width = 4.5, height = 1.5, fontname = Helvetica, fontsize = 20]
rec1 [label = @@1]
rec2 [label = b]
# edge definitions with the node IDs
rec1 -> rec2
# from code
}
[1]: text_to_show
")
}
foo(insert_text_here = "hello")
返回此错误:
eval(parse(text = split_references[i])) 中的错误:找不到对象“text_to_show”```。
如果我在函数外部的全局环境中定义变量text_to_show,它可以完美运行而不会出错:
text_to_show <- "hello"
foo(insert_text_here = "hello")
#success
因此,当 GrViz 的输入由函数的参数定义时,问题就出现了。有没有办法解决这个问题?
(这似乎与这个问题有关:https://github.com/rich-iannone/DiagrammeR/issues/266)
【问题讨论】:
-
您可能还想包括一个调用代码示例以及对所有需要的包的库调用。看起来
grViz调用中的text_to_show参数没有访问函数的环境。当我创建一个不接受参数的函数时,我得到了同样的错误,所以你也应该包括成功的方法,因为我显然不明白你对“在我的本地环境中定义变量text_to_show”的描述, -
@IRTFM 谢谢!查看修改。
-
<-和=在参数传递的上下文中是不同的。有点自相矛盾的是,<-返回的结果只是 RHS 值。
标签: r vis.js diagrammer