假设我有一些功能,f:

f <- function() {
  print(sys.calls())
}

假设我有两个附加功能,

g <- function() {
  f()
}
h <- function() {
  f()
}

调用这些函数会导致:

> g()
[[1]]
g()

[[2]]
f()

> h()
[[1]]
h()

[[2]]
f()

假设

  1. 没有任何函数被进一步修改或覆盖,
  2. 唯一被称为f的地方是gh里面.

在调用堆栈中,f()总是紧跟在g()之后出现,这样我就可以在f()内部判断sys.call(-1)[[1]],以确定f是被g调用还是被h调用,我能有多可靠/稳定/自信?

换句话说,我是否缺少一些使用模式,用户会在堆栈中插入另一个调用,介于对gh的调用和对f的调用之间?

推荐答案

调用堆栈是稳定的,因为directly调用这些函数将始终导致打印正确的外部函数.

然而,这并不意味着无论何时调用f(),都可以使用此方法直接标识外部函数.当gh在函数式编程上下文中作为参数传递时,问题就来了.这些在R中非常常用,即使是最终用户.

例如,一个调用者可以使用do.call中的g

do.call(g, list())
#> [[1]]
#> do.call(g, list())
#> 
#> [[2]]
#> (function() {
#>   f()
#> })()
#> 
#> [[3]]
#> f()

请注意,由于g的调用方式,在调用f()之前没有独立的g().

如果在*apply个函数族或MapaveReduce中的一个函数中调用gh,则情况也是如此.这只是在基本包中,更不用说扩展包了.

R相关问答推荐

如何识别组内的行是否在同一列中具有值?

按R中不同长度的组将日期时间列值四舍五入到小时

在交互式情节中从barplot中获取值时遇到问题,在shinly中的ggplotly

在水平条形图中zoom x_轴

在ubuntu 22.04上更新到R4.4后包安装出现编译错误

使用gggplot 2在R中重新调整面板和y轴文本大小

如何根据包含相同值的某些列获取总额

R箱形图gplot 2 4组但6个参数

获取一个数据库框架的摘要,该数据库框架将包含一列数据库框架,

将嵌套列表子集化为嵌套列表

如何在R中合并两个基准点?

汇总数据表中两个特定列条目的值

根据文本字符串中的值粘贴新列

使用整齐的计算(curl -curl )和杂音

非线性混合效应模型(NLME)预测变量的置信区间

如何对r中包含特定(未知)文本的行求和?

将多个列合并为一个列的有效方法是什么?

如何预测原始数据集并将值添加到原始数据集中

是否有可能从边界中找到一个点值?

在ggplot2图表中通过端点连接点