如何将“读者友好”的 sessionInfo() 写入文本文件

Posted

技术标签:

【中文标题】如何将“读者友好”的 sessionInfo() 写入文本文件【英文标题】:How to write a "reader-friendly" sessionInfo() to text file 【发布时间】:2014-03-24 21:43:23 【问题描述】:

我想将“sessionInfo()”的输出保存到一个文本文件中。使用“write()”失败,因为“list() 不能由 'cat()' 处理”。然后我用 ascii = T 尝试了“save()”,但生成的文件并没有真正的帮助。

我想在文本文件中输出like this。有什么简单直接的方法吗?

【问题讨论】:

我正在寻找一个可以包含在 R 降价文件 (Rmd) 中并且可以很好地打印到 PDF/html 的选项。通过我的方法,我最终为相关的SO question 提供了答案。 【参考方案1】:

将屏幕输出捕获为字符向量并使用writeLines

writeLines(capture.output(sessionInfo()), "sessionInfo.txt")

【讨论】:

是的!谢谢——我现在没有 capture.output() 函数。【参考方案2】:
‘sink’ diverts R output to a connection.

sink("sessionInfo.txt")
sessionInfo()
sink()

sessionInfo.txt:

R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.0.2 tools_3.0.2 

【讨论】:

谢谢!效果也很好。【参考方案3】:

您可能希望使用 devtools 包中的 session_info()。在这种情况下,您可以使用sink(),如此处的答案之一所述,或者您可以使用以下内容来设置标题并使其更加不言自明(因为print(session_info()) 使用message() 来显示标题):

library("devtools")
library("knitr")

my_session_info <- devtools::session_info()

writeLines(text = 
    paste(sep = "\n", collapse = "",
          paste0(rep("-", 80), collapse = ""),
          paste(paste0(rep("-", 32), collapse = ""),
                "R environment",
                paste0(rep("-", 33), collapse = "")),
          paste0(rep("-", 80), collapse = ""),
          paste(knitr::kable(data.frame(setting = names(my_session_info$platform),
                                  value = as.character(my_session_info$platform))), collapse = "\n"),
          paste0(rep("-", 80), collapse = ""),
          paste(paste0(rep("-", 35), collapse = ""),
                "packages",
                paste0(rep("-", 35), collapse = "")),
          paste0(rep("-", 80), collapse = ""),
          paste(knitr::kable(my_session_info$packages), collapse = "\n")
          )
, con = "session_info.txt")

[ p.s 记得library(devtools) ]

【讨论】:

+1 表示devtools::session_info。它更容易阅读,因为它是按字母顺序排列的。它还有一些不错的附加功能,例如从 github 或 bitbucket 安装的包的提交哈希。【参考方案4】:

如前所述,您可以使用devtools::session_info() 来获取更易于处理的对象。然后我使用yaml::write_yaml()(或者jsonlite::write_json())将对象写入机器可读人类可读的版本。例如:

library(magrittr)
library(devtools)
library(yaml)

session_info() %>%
    write_yaml("./path/to/file.yaml")

【讨论】:

【参考方案5】:

好像我们不需要 writeLines(),因为我们可以直接指定输出文件到 capture.output() 函数。

sessionInfo() %>% capture.output(file="session_info.txt")

【讨论】:

以上是关于如何将“读者友好”的 sessionInfo() 写入文本文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将门户 URL 转换为其对应的友好 URL

如何将我的网址更改为用户友好的网址 [重复]

Rails - 如何将生成的 URL 修复为友好的 URL

如何将坐标转换为谷歌友好坐标

如何将 mkv(带字幕)转换为 Nexus One 友好的东西?

如何将相同内容的多个 URL 引用映射到一个 SEO 友好 URL?