大多数可移植的方式将README消息嵌入到RData(R workspace)文件中

我正在开发一个用户提交的数据经过验证的工作流程,并且运行了一些初步的统计测试,然后将生成的工作空间发送给统计人员进行进一步分析。

在某些情况下,RData文件将发送给统计员,直到那时,他们对项目不熟悉。 我希望他们能够打开RData文件并显示一条总结项目的消息,告诉他们打开的工作区中包含的内容以及可以查找更多信息的URL。

问题在于,我试图尽可能少地依赖统计学家运行命令或加载包。 我已经能够提出的最好的(在创建RData文件的过程中):

library(stringr);
## the message, wrap it to 40 char because we're being cautious
message <- strwrap("Blah blah this is a message, look at this url http://foo.bar, here is a file listing. To see this information again, please type 'README()'",40);

## override ls 
ls<-README<-function(...) {
  ## prints neatly wrapped message with no line numbers
  cat(paste0(message,collapse='n'),'nn');
  ## capture the execution environment
  pf<-parent.frame(); 
  ## print the requested ls output
  print(base:::ls(...));
  ## if README was invoked as ls, clean it up
  if("ls" %in% base:::ls(pf)) pf$ls<-NULL;}

## generate the RData file, where FOO, BAR, BAZ are, e.g. 
## fitted models or data frames
save(ls,README,message,FOO,BAR,BAZ,file='your_output.RData');

然后your_output.RData是统计员将从他们的R会话中打开的文件。

这是次优的,因为它假定统计员将在控制台键入“ls”,而不是有某种接口(例如ESS)为他们做(可能出错)。 而且,即使我为了用户友好而干这些事情,也很容易混淆它们的基本功能。

我想到的另一件事是让README成为一个自定义类,并在RData文件中保存S3打印方法,但不是每个人都会立即将完整的对象打印到他们的控制台。 我可能会尝试class()head() ,谁知道其他人先做了什么。

.First()命令的文档说(强调我的)...

函数'.First'(和'.Last')可以在适当的'.Rprofile'或'Rprofile.site'文件中定义, 或者已经保存在'.RData'中。

...但是如果我从已经运行的会话中打开一个RData文件, .First()不会执行。

当有人用最少的用户输入打开RData文件时,有人知道一种显示一次性消息的方式吗?

链接地址: http://www.djcxy.com/p/38299.html

上一篇: Most portable way to embed a README message in an RData (R workspace) file

下一篇: reading raw data in R to be saved as .RData file using the dropbox api