在 DiagrammeR 中将参数从函数传递到 GrViz 时出错:"Object not found"
Error passing an argument from a function to GrViz in DiagrammeR: "Object not found"
我正在尝试创建一个函数,该函数根据使用 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")
Returns 这个错误:
Error in eval(parse(text = split_references[i])): object "text_to_show" not found```.
如果我在函数外的全局环境中定义变量 text_to_show
,它可以完美无误地运行:
text_to_show <- "hello"
foo(insert_text_here = "hello")
#success
因此,当 GrViz 的输入由函数的参数定义时,问题就来了。有办法解决这个问题吗?
(这似乎与这个问题有关:https://github.com/rich-iannone/DiagrammeR/issues/266)
解决方案可能是使用 <<-
:
text_to_show <<- insert_text_here
我得到一个包含两个框的图表,第一个框标记为“你好”:
通常 <<-
功能已被弃用,但我首先尝试 assign
进入 grViz 环境并被告知其“环境已锁定”。使用 <<-
相当于在函数定义之前进行赋值。
编辑:我不知道使用 assign
是否更好或更清楚,但我发现你可以对 foo
的环境进行分配,所以这也成功了foo 主体的第一行:
assign('text_to_show', insert_text_here, envir=environment(foo))
我担心该操作中可能存在“过于递归”的问题,但似乎在对该行进行评估时,搜索路径中已经有一个非常好的foo
。
我正在尝试创建一个函数,该函数根据使用 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")
Returns 这个错误:
Error in eval(parse(text = split_references[i])): object "text_to_show" not found```.
如果我在函数外的全局环境中定义变量 text_to_show
,它可以完美无误地运行:
text_to_show <- "hello"
foo(insert_text_here = "hello")
#success
因此,当 GrViz 的输入由函数的参数定义时,问题就来了。有办法解决这个问题吗?
(这似乎与这个问题有关:https://github.com/rich-iannone/DiagrammeR/issues/266)
解决方案可能是使用 <<-
:
text_to_show <<- insert_text_here
我得到一个包含两个框的图表,第一个框标记为“你好”:
通常 <<-
功能已被弃用,但我首先尝试 assign
进入 grViz 环境并被告知其“环境已锁定”。使用 <<-
相当于在函数定义之前进行赋值。
编辑:我不知道使用 assign
是否更好或更清楚,但我发现你可以对 foo
的环境进行分配,所以这也成功了foo 主体的第一行:
assign('text_to_show', insert_text_here, envir=environment(foo))
我担心该操作中可能存在“过于递归”的问题,但似乎在对该行进行评估时,搜索路径中已经有一个非常好的foo
。