作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题的标题几乎说明了这一点:R 函数是否有办法确定它是被直接调用还是从 for
内部调用?或 while
环形? sys.frame(0)
或 parent.frame(1)
返回 .GlobalEnv
函数是直接调用还是从这些循环之一中调用。那么,还有其他方法吗?
谢谢。
最佳答案
这不是一个明确的答案,但我认为您的解决方案是查看 sys.status
,特别是 sys.parents
.第二个例子是当函数在另一个函数内和循环内被调用时。不确定您如何在不明确知道的情况下区分这一点。
test <- function() sys.status()
for(i in 1:2){
print(test())
}
## $sys.calls
## $sys.calls[[1]]
## print(test())
##
## $sys.calls[[2]]
## test()
##
## $sys.calls[[3]]
## sys.status()
##
##
## $sys.parents
## [1] 0 0 2
##
## $sys.frames
## $sys.frames[[1]]
## <environment: 0x0479a1c8>
##
## $sys.frames[[2]]
## <environment: 0x0479a2fc>
##
## $sys.frames[[3]]
## <environment: 0x0479a334>
##
##
## $sys.calls
## $sys.calls[[1]]
## print(test())
##
## $sys.calls[[2]]
## test()
##
## $sys.calls[[3]]
## sys.status()
##
##
## $sys.parents
## [1] 0 0 2
##
## $sys.frames
## $sys.frames[[1]]
## <environment: 0x047993cc>
##
## $sys.frames[[2]]
## <environment: 0x04799570>
## $sys.frames[[3]]
## <environment: 0x047995a8>
test()
## $sys.calls
## $sys.calls[[1]]
## test()
##
## $sys.calls[[2]]
## sys.status()
##
##
## $sys.parents
## [1] 0 1
##
## $sys.frames
## $sys.frames[[1]]
## <environment: 0x04775500>
##
## $sys.frames[[2]]
## <environment: 0x04775538>
test_sq <- function() test()
for(i in 1:2){
print(test_sq())
}
## $sys.calls
## $sys.calls[[1]]
## print(test_sq())
##
## $sys.calls[[2]]
## test_sq()
##
## $sys.calls[[3]]
## test()
##
## $sys.calls[[4]]
## sys.status()
##
##
## $sys.parents
## [1] 0 0 2 3
##
## $sys.frames
## $sys.frames[[1]]
## <environment: 0x04766c60>
##
## $sys.frames[[2]]
## <environment: 0x04766dcc>
##
## $sys.frames[[3]]
## <environment: 0x04766e04>
##
## $sys.frames[[4]]
## <environment: 0x04766e3c>
##
##
## $sys.calls
## $sys.calls[[1]]
## print(test_sq())
##
## $sys.calls[[2]]
## test_sq()
##
## $sys.calls[[3]]
## test()
##
## $sys.calls[[4]]
## sys.status()
##
##
## $sys.parents
## [1] 0 0 2 3
##
## $sys.frames
## $sys.frames[[1]]
## <environment: 0x04765ac8>
##
## $sys.frames[[2]]
## <environment: 0x04765c34>
##
## $sys.frames[[3]]
## <environment: 0x04765c6c>
##
## $sys.frames[[4]]
## <environment: 0x04765d30>
test_sq()
## $sys.calls
## $sys.calls[[1]]
## test_sq()
##
## $sys.calls[[2]]
## test()
##
## $sys.calls[[3]]
## sys.status()
##
##
## $sys.parents
## [1] 0 1 2
##
## $sys.frames
## $sys.frames[[1]]
## <environment: 0x0475ce40>
##
## $sys.frames[[2]]
## <environment: 0x0475cee8>
##
## $sys.frames[[3]]
## <environment: 0x0475cf20>
关于r - R 函数有没有办法判断它是从 `for` 还是 `while` 循环调用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11821572/
我是一名优秀的程序员,十分优秀!