我正在扩展doSvUnit.R脚本,以便在其报告中包含示例。
任务的一个初始步骤是将测试与函数相关联,其中函数的名称在变量中。 (我的真实测试函数不只是checkTrue
,而是调用名为funcName
的函数的示例。我只是在这里展示这个概念。)
> funcName <- "double.threshold"
> test(get(funcName)) <- function() checkTrue(TRUE)
Error in test(get(funcName)) <- function() checkTrue(TRUE) :
could not find function "get<-"
>
甚至
> test(get("double.threshold")) <- function() checkTrue(TRUE)
Error in test(get("double.threshold")) <- function() checkTrue(TRUE) :
target of assignment expands to non-language object
>
我不明白错误消息背后的原因,我不明白为什么我得到两个不同的错误消息,我认为是同样的事情。
感谢第二条错误消息,我通过将函数存储在一个对象中找到了workaround,但我不明白为什么它应该是必要的而且我不确定这是否特定于{{3 }}
> f <- get(funcName)
> test(f) <- function() checkTrue(TRUE)
>
答案 0 :(得分:1)
Section3.4.4解释了(子)分配的工作原理。
特别是names
上的示例显示了R如何使用嵌套函数调用(在左侧)和赋值来解释语句。
基本上(过于简单化,但对于大多数情况来说足够精确),它表明它需要左侧每个函数的赋值版本。
请注意,在不同情况下,这些相同的问题会让很多人感到不安:请参阅this great answer by Gavin Simpson我自己的一个问题,这会让我看到幕后发生的事情。
答案 1 :(得分:0)
我也怀疑它是特定于svUnit的。它告诉你解析器正在寻找get<-
函数并且找不到它。
> ttt <- function(x) x+2
> fname <- "ttt"
> body(ttt ) <- quote(x+4)
> ttt
function (x)
x + 4
该操作成功但是这个操作没有:
> body(get(fname) ) <- quote(x+4)
Error in body(get(fname)) <- quote(x + 4) :
could not find function "get<-"