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

rjzwgtxy  于 2022-12-25  发布在  其他
关注(0)|答案(5)|浏览(146)

我想将“sessionInfo()”的输出保存到文本文件。使用“write()”失败,因为“list()不能被”cat()“处理。然后我尝试使用ascii = T的“save()”,但结果文件没有什么帮助。
我想在文本文件中输出like this。有简单直接的方法吗?

368yc8dk

368yc8dk1#

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

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

kb5ga3dv2#

‘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
62o28rlo

62o28rlo3#

您可能希望使用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(t(data.frame(my_session_info$platform)), col.names = "value"), collapse = "\n"),
          paste0(rep(" ", 80), collapse = ""),      # some separator
          paste0(rep(" ", 80), collapse = ""),      # some separator
          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) ]

unftdfkk

unftdfkk4#

如前所述,您可以使用devtools::session_info()获得一个更容易处理的对象,然后使用yaml::write_yaml()(或者jsonlite::write_json())将该对象写入机器可读 * 和 * 人类可读版本。

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

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

bvuwiixz5#

看起来我们不需要writeLines(),因为我们可以直接指定要捕获的输出文件。output()函数。

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

相关问题