【发布时间】:2012-10-15 00:22:04
【问题描述】:
This question 提示以下问题:有没有办法查看调用堆栈中的special primitive 函数?
例如,创建一个在退出时返回调用堆栈的函数:
myFun <- function(obj){
on.exit(print(sys.calls()))
return(obj)
}
使用assign 调用此函数并将其结果分配给对象可避免使用特殊的原始函数:
> assign("myObj",myFun(4))
[[1]]
assign("myObj", myFun(4))
[[2]]
myFun(4)
但是使用赋值运算符,这会被排除在堆栈之外
> `<-`(myObj, myFun(6))
[[1]]
myFun(6)
当然,希望在调用堆栈中看到赋值运算符可能并不常见,但其他函数(例如 rep 和 log)也会被隐藏
【问题讨论】:
-
+1 提出了一个非常有趣且表述清晰的问题。 R Internals 指南中的链接部分也很有趣:我之前没有考虑过使用 Primitive 函数的各种动机。
<-、log和UseMethod都是原语,但原因完全不同。 -
@JoshO'Brien 我认为这些动机不一定是正确的——它们都可以通过
.Internal函数来完成