对象在 R browser() 会话中既存在又不存在

Posted

技术标签:

【中文标题】对象在 R browser() 会话中既存在又不存在【英文标题】:Object both exists and doesn't exist in an R browser() session 【发布时间】:2018-04-09 21:10:49 【问题描述】:

过去几年我在使用新版本的 R 时一直遇到这个问题。这里我使用的是 3.1.3。 (我不使用最新版本,因为我使用的某些软件包不受他们支持。)

函数中存在一个对象,我可以在 browser() 中使用它,但是如果我将一段脚本发送到 R 控制台,它就无法识别该对象。如果我在不调用 browser() 的情况下调用该函数,该函数通常会按预期工作而不会引发错误消息。

a <- c(1,2,3,4,5)
b <- c(12,34,56,42,78)
dframe <- data.frame(a,b)

dummy <- function()
 browser()
  fit <- lm(b ~ a ,dframe)
  p.val <-  summary(fit)$coef[8]
  if (p.val <0.05) 
    cat("Significant \n")
  else  
   cat("Not significant \n")
  


dummy()

如果我随后将以上所有内容发送到控制台,则 browser() 将打开:

源(文件('剪贴板'))

调用自:dummy()

浏览[1]> 适合

浏览[1]> p.val

浏览[1]> 摘要(适合)

浏览[1]> p.val

[1] 0.03815541

浏览[1]> p.val

[1] 是的

现在我将 ifelse 函数作为文本块发送到控制台。

浏览[1]> 源(文件('剪贴板'))

eval(expr, envir, enclos) 中的错误:找不到对象 'p.val' # 为什么?

浏览[1]> 存在("p.val")

[1] 是的

Browse[1]> if (p.val

cat("重要\n")

否则

cat("不重要\n")

在 #2 处调试:cat("Significant \n") #why ?

浏览[3]>

那么为什么我的对象“p.val”不存在于 browser() 会话中,而它显然存在呢?

【问题讨论】:

【参考方案1】:

看起来像你想要的

source(file="clipboard", local=TRUE)

p.val 仅在本地范围内定义。默认情况下,source() 在用户的全局范围内调用事物,而不是本地函数范围。

【讨论】:

谢谢!但是为什么它会返回“debug at #2...”? 你是什么意思,“为什么”?这只是告诉您它当前正在调试的行号 因为您粘贴了一个新表达式,所以要继续调试的下一行是第二行。我不确定你在期待什么。 好的,再次感谢。我不认为旧版本的 R 做到了这一点。我想我需要更新我的技能。 我期待它执行,因为满足 if() 条件。

以上是关于对象在 R browser() 会话中既存在又不存在的主要内容,如果未能解决你的问题,请参考以下文章

用 R 检查远程目录是不是存在

java.lang.IllegalStateException:在 ajax 调用中既不是 BindingResult 也不是普通目标对象

文件操作

$.browser.msie' 为空或不是对象

生产环境会话对象中不存在 Passport 对象

'$.browser.msie' 为空或不是对象