我的问题如下。给定以下函数:
spam <- function() {
cat("eggs\n")
}
bla <- spam()
我想找到函数将其内容返回到的对象的名称。在示例中
bla <- spam()
这将是 bla
.使用 match.call
我可以找到执行的调用:match.call()
function() {
cat("eggs\n")
}
但是,这不包括函数返回的对象的名称。我在 R-help 列表、google 和 SO 上环顾四周,但找不到任何有用的东西。任何建议如何继续?
背景
从我的回复中我了解到我想要的有点偏向于超神。我会解释我来自哪里,这可能会阐明我的动机。我工作的上下文与测试有关,更具体地说,是测试某个对象是否随时间变化(例如模型输出)。
通常,用户会编写一堆代码来生成一个对象,保存它并随着时间的推移将保存的对象与新生成的对象进行比较。用户可以使用以下函数执行此操作:
spam <- testReferenceChange(expression)
通常这个函数会读取引用并生成一个新对象,用户可以相互比较。为了重新生成引用文件,我想使用完全相同的代码。我通过更改全局选项(参见
options
和 getOption
)、recalculate
来做到这一点。 .我们在重新计算模式下运行这个函数,存储新的引用。现在是我的问题的原因。在保存对文件的引用(使用 save()
)时,我想使用用户返回的对象的名称,结合一个日期,来创建一个唯一的名称。
最佳答案
...我很难想象你为什么会想要这个。另外,您的 spam
函数返回 NULL
所以这似乎更没有意义......
尽管如此,最简单/最干净的方法是将名称传递给 spam
功能!
spam <- function(name) {
cat(name, "<- eggs\n")
42 # return a value
}
bla <- spam("bla")
更上一层楼,您可以拥有
spam
做作业。你也可以玩substitute
允许指定不带引号的名称:spam <- function(name) {
name <- as.character(substitute(name))
cat(name, "<- eggs\n")
value <- 42
assign(name, value, parent.frame())
}
spam(bla)
bla # 42
关于r - 查找函数返回的对象的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522247/