在R中为事后调试保存工作区(在特定框架中)

6

在调试一些R代码时,我想把工作空间(即所有当前对象)保存在某个特定的框架中,以便我可以在调试浏览器之外使用这些对象。按照此答案给出的示例:

x <- 1:5
y <- x + rnorm(length(x),0,1)
f <- function(x,y) {
  y <- c(y,1)
  lm(y~x)
}

设置 options(error = recover) 并运行 f(x,y),可以让我们选择要进入的框架。在这里,我会选择 2 并使用 ls() 检查我的工作区,如下所示:

Browse[1]> ls()
 [1] "cl" "contrasts" "data" "formula" "m" "method" "mf" "model" "na.action" "offset" "qr"         
[12] "ret.x" "ret.y" "singular.ok" "subset" "weights" "x" "y"

我希望能够保存所有这些对象以便以后使用。在浏览器中使用save.image(),或将其插入到相关函数中,可以保存最初从中调用f(x,y)的环境。我可以使用dump.frames()并对生成的dump.frames分类对象调用debugger(),但我仍然必须在调试浏览器内交互式地工作。我真正想要的只是一个包含上述18个对象的.RData文件。
所有这些的目的是在R Markdown文档中复现某些错误。如果有人对该特定应用程序有想法,将不胜感激。

1
我鼓励你询问关于你的R markdown错误,而不是询问如何实现你想到的解决方案。有人可能知道解决你markdown错误的方法,这将使这个问题无意义。 - Joshua Ulrich
@JoshuaUlrich - 简而言之,因为我不知道如何使.Rmd文件与调试浏览器进行交互。当recover()要求我"输入帧编号或0退出"时,我该如何将其写入.Rmd文件中?生成的.html文件显示错误并继续执行下一行代码。请参见这个代码片段 - Zoë Clark
1个回答

9
save(list=ls(), file="mylocals.Rda")

我必须克服的难题,才能意识到这是前进的道路,那就是在save函数中的参数名字。为什么作者使用参数名“list”,而不是列表而是字符向量?同样的抱怨也适用于rm函数的参数名。


为什么不直接使用save.image(file="mylocals.Rda")呢? - hadley
2
@hadley:save.image 代码表示它会执行以下操作:save(list = ls(envir = .GlobalEnv, all.names = TRUE), ...) - IRTFM
@DWin - 除了“如何”,我很想快速了解“为什么”。 - Zoë Clark
жІЎе…ізі»пјҢиҝҷйғҪжҳҜе…ідәҺеңЁжөҸи§ҲеҷЁдёӯдҪҝз”Ёls(envir = .GlobalEnv)е’Ңls()д№Ӣй—ҙзҡ„еҢәеҲ«пјҢжҲ‘зҺ°еңЁжҳҺзҷҪдәҶгҖӮи°ўи°ўпјҒ - Zoë Clark
抱歉理解能力有限。我以为你已经明白ls()仅返回当前浏览环境中的局部对象,而这些对象与.GlobalEnv中的对象不同。 - IRTFM
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接