定义S3类“bar”的对象和打印方法:
foo=list(1)
class(foo) <- c("bar")
print.bar <- function(x,...){
cat("print.bar says this was ",deparse(substitute(x)),"\n")
}
现在 print(foo) 执行以下操作:
> print(foo)
print.bar says this was foo
很好,但自动打印失败:
> foo
print.bar says this was structure(list(1), class = "bar")
我猜这与该行被评估为顶级表达式的方式有关。在 R-devel 上快速搜索没有结果。谁知道怎么修它?
我想要这个名称的原因是因为我定义的是一个函数,并且我希望能够将“try foo(2)”放入 print 方法中(从对象的名称中获取“foo”)。是的,您可以在 S3 中对函数进行子类化。我想可能还有其他的陷阱..
这是一个相当特殊的情况,因为 R 替换为foo
在调用之前按其值print
当您在命令行中键入名称时。这可以通过以下方式说明:
foo=list(1)
class(foo) <- c("bar")
print.bar <- function(x,...){
print(sys.calls())
}
> foo
[[1]]
print(list(1))
[[2]]
print.bar(list(1))
> print(foo)
[[1]]
print(foo)
[[2]]
print.bar(foo)
因此,如果没有名称作为属性(如 Aaron 所示),您根本无法从任何地方提取对象的名称。它根本不存在于调用堆栈中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)