我需要记录类似于SAS日志的R代码/控制台



我在一个研究部门工作,该研究部门厌倦了每年向SAS支付一百万美元。作为部门中唯一的R/SAS双重用户,我的任务是领导过渡。我们的大多数分析师都是很好的运动,比我想象的要顺利。

,但是我们需要一种方法来记录我们的程序以进行文档目的,类似于我们对SAS的工作。日志中需要具有简单的指标,合并数据,警告/错误的观察值数量,可能还可能是所有输出。

其中一些东西是在控制台中输出的,我可以沉没以保存东西,但是有很多没有输出的东西。例如,我们可以在合并之前/合并后的程序中添加额外的代码来记录这些内容 - nrows(),但我想让我的分析师更容易。

任何人都可以向我指出一个方向,以更轻松地从r输出更详细的日志吗?我从未听说过的软件包或一些功能?

谢谢。

您可能需要考虑将脚本转换为rmarkDown文件。编译rmarkDown文件可以产生比纯文本文件更有效的日志文件。

dplyr()软件包的

glimpse()对于获取数据框的内容的快速查看很有用。str()给出了数据范围的类似输出,也可以在其他类上进行工作。

library(dplyr)
glimpse(mtcars)
Observations: 32
Variables: 11
$ mpg  (dbl) 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8, 16.4, 1...
$ cyl  (dbl) 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8, 8, 8, 8...
$ disp (dbl) 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 140.8, 167.6, 167...
$ hp   (dbl) 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, 180, 180, 205, 2...
$ drat (dbl) 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92, 3.07, 3...
$ wt   (dbl) 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3.150, 3.440, 3.4...
$ qsec (dbl) 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 22.90, 18.30, 18....
$ vs   (dbl) 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0...
$ am   (dbl) 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0...
$ gear (dbl) 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3...
$ carb (dbl) 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2...

如果使用R CMD BATCH在命令行中运行R脚本,则可以使用代码保存Rout文件,以及所有输出,包括警告和错误,这与Stata基本相同日志文件,如果您的同事喜欢SAS,他们可能会很好。

您可以为自己做的事情编写包装功能,并且需要像您所说的合并有关的某些文档。所以类似:

sasMerge <- function(x, y, ...) {
  print(sprintf("The first table has %s rows", nrow(x)))
  print(sprintf("The second table has %s rows", nrow(y)))
  out <- merge(x, y, ...)
  print(sprintf("The merged table has %s rows", nrow(out)))
  return(out)
}

一个带有日志文件的完整可重复的示例在这里:

rFile <- file("test.r")
rCode <- '
sasMerge <- function(x, y, ...) {
  print(sprintf("The first table has %s rows", nrow(x)))
print(sprintf("The second table has %s rows", nrow(y)))
out <- merge(x, y, ...)
print(sprintf("The merged table has %s rows", nrow(out)))
return(out)
}
authors <- data.frame(
  surname = I(c("Tukey", "Venables", "Tierney", "Ripley", "McNeil")),
  nationality = c("US", "Australia", "US", "UK", "Australia"),
  deceased = c("yes", rep("no", 4)))
books <- data.frame(
  name = I(c("Tukey", "Venables", "Tierney",
             "Ripley", "Ripley", "McNeil", "R Core")),
  title = c("Exploratory Data Analysis",
            "Modern Applied Statistics ...",
            "LISP-STAT",
            "Spatial Statistics", "Stochastic Simulation",
            "Interactive Data Analysis",
            "An Introduction to R"),
  other.author = c(NA, "Ripley", NA, NA, NA, NA,
                   "Venables & Smith"))
sasMerge(authors, books, by.x = "surname", by.y = "name")
'
writeLines(rCode,rFile)
close(rFile)
system("R CMD BATCH test.r")

如果您运行此示例合并,则运行日志文件

相关内容

最新更新