gpt4 book ai didi

r - R 函数有没有办法判断它是从 `for` 还是 `while` 循环调用的?

转载 作者:行者123 更新时间:2023-12-04 15:25:11 25 4
gpt4 key购买 nike

问题的标题几乎说明了这一点: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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com