对象在 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() 会话中既存在又不存在的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.IllegalStateException:在 ajax 调用中既不是 BindingResult 也不是普通目标对象