我在一个研究部门工作,该研究部门厌倦了每年向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")
如果您运行此示例合并,则运行日志文件