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

标签 r debugging

我有一个这样的功能:

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/

相关文章:

r - 如何更改和删除默认库位置?

java - 无法使用 R 连接 MySQL

c++ - 为什么 gdb 在 `absl::flat_hash_map` 中找不到元素访问函数?

xcode - 使 Xcode 9 控制台自动滚动到底部

ios instruments vm tracker IOKit 疯狂的住所大小

r - 将参数传递给 r 中的 nloptr

r - R 的 lm 函数如何处理因子级别(在 C_Cdqrls 中?)?

r - ggplot中的控制点边框厚度

javascript - 警报框未打开

javascript - 忽略 javascript 调试器中的 onMouseMove