gpt4 book ai didi

r - 在函数中获取浏览状态

转载 作者:行者123 更新时间:2023-12-03 14:39:49 25 4
gpt4 key购买 nike

我有一个这样的功能:

fun <- function() {
browser()
is_browsing()
}
我想知道 is_browsing()的代码是什么应该是这样它返回 TRUE如果当前正在浏览该函数,则控制台将如下所示:
> fun()
Called from: fun()
Browse[1]>
debug at #3: is_browsing()
Browse[2]>
TRUE
但是,如果我注释掉 browser()行,或按 c 停止浏览, is_browsing()应该返回 FALSE ,像这样:
> fun()
Called from: fun()
Browse[1]> c
FALSE
我读过 debuggingState()isdebugged()但在我的情况下,它们似乎没有多大帮助。
真实情况仅供引用,是在我们浏览时更新情节或 View ,但仅当我们正在浏览时,如果我们不是,我只想最终绘制/查看一次,以节省资源。

最佳答案

当您使用浏览器时,提示会显示浏览级别:
浏览[1]、浏览[2]、...

> browser()
Called from: top level
Browse[1]> browser()
Called from: top level
Browse[2]>
此浏览级别在 main.C 中计算作者:
browselevel = countContexts(CTXT_BROWSER, 1);
哪里 CTXT_BROWSER是在 defn.h 中定义的常量:
CTXT_BROWSER  = 16
你可以使用这个内部 countContexts获取 is_browsing 的函数您正在寻找的信息: is_browsing.cpp
#include <Rcpp.h>
#include <R.h>
#include <Rinternals.h>
using namespace Rcpp;


// [[Rcpp::export]]
int is_browsing() {
return Rf_countContexts(16,1);
}
测试 :
library(Rcpp)
sourceCpp('is_browsing.cpp')
test <- function() {
is_browsing()
}

test()
#> [1] 0

browser()
#> Called from: eval(expr, envir, enclos)

test()
#> [1] 1
创建于 2020-08-29 由 reprex package (v0.3.0)
如果在函数中调用浏览器也可以工作:
test2 <- function() {
browser()
is_browsing()
}
test2()
Called from: test2()
Browse[1]> n
debug à #3 :is_browsing()
Browse[2]> n
[1] 1
如果您想要 TRUE/FALSE 返回,则 Rcpp 代码将是:
#include <Rcpp.h>
#include <R.h>
#include <Rinternals.h>

// [[Rcpp::export]]
Rcpp::LogicalVector is_browsing() {
return Rf_countContexts(16,1) > 0;
}

关于r - 在函数中获取浏览状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63552940/

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