我编写了以下代码将控制台输出重定向到文本文件。当我交互式运行代码时,所有三个命令'(dim,str,摘要)输出都出现在文本文件中。但是,当我将代码放在函数中并交互式地运行函数调用时,只出现了str命令outuput。这可能是缓冲问题。有什么建议吗?
操作系统:OSX 10.9.5(Mavericks);R 3.1.1GUI1.65 Mavericks构建(6784)
此代码有效…
con <- file("FileInfoLog.txt")
sink(con, append=TRUE)
sink(con, append=TRUE, type="message")
writeLines("\n\n\n===============================================================\n")
writeLines("Dimensions are ")
dim(db)
writeLines("\n\n\n===============================================================\n")
writeLines("Structure is ")
str(db)
writeLines("\n\n\n===============================================================\n")
writeLines("Summary is ")
summary(db)
# Restore output to console
sink(type="message")
sink()
此代码不能可靠地工作……只有str()输出出现在文本文件中。
getFileInfo <- function(db) {
con <- file("FileInfoLog.txt")
sink(con, append=TRUE)
sink(con, append=TRUE, type="message")
writeLines("\n\n\n===============================================================\n")
writeLines("Dimensions are ")
dim(db)
writeLines("\n\n\n===============================================================\n")
writeLines("Structure is ")
str(db)
writeLines("\n\n\n===============================================================\n")
writeLines("Summary is ")
summary(db)
# Restore output to console
sink(type="message")
sink()
}
FileInfoLog. txt来自有效的代码…
===============================================================
尺寸为[1] 28947 17
===============================================================
结构是'data. frame':28947 obs。17个变量:$store:int 2 2 2 2 2 2 2 2…$品牌:因子w/3级别“多米尼克”,“分钟.女仆”,…:3 3 3 3 3 3 3 3 3 3…$周:int 40 46 47 48 50 51 52 53 54 57…$logmobile:num 9.02 8.72 8.25 8.99 9.09…[…]
===============================================================
摘要是商店品牌周log移动壮举价格AGE60
Min.: 2.00多米尼克:9649 Min.:40.0 Min.:4.159 Min.:0.0000 Min.:0.520 Min.:0.05805
第一区.:53.00 min.女仆:9649第一区.:70.0第一区.:8.490第一区.:0.0000第一区.:1.790第一区.:0.12210
中位数:86.00热带雨果:9649中位数:101.0中位数:9.034中位数:0.0000中位数:2.170中位数:0.17065
平均值:80.88平均值:100.5平均值:9.168平均值:0.2373平均值:2.282平均值:0.17313
第三区.:111.00第三区.:130.0第三区.:9.765第三区.:0.0000第三区.:2.730第三区.:: 13.482 Max.:1.0000 Max.:3.870 Max.:0.30740
[…]
FileInfoLog. txt来自无法可靠工作的代码…
===============================================================
尺寸是
===============================================================
结构是'data. frame':28947 obs。17个变量:$store:int 2 2 2 2 2 2 2 2…$品牌:因子w/3级别“多米尼克”,“分钟.女仆”,…:3 3 3 3 3 3 3 3 3 3…$周:int 40 46 47 48 50 51 52 53 54 57…$logmobile:num 9.02 8.72 8.25 8.99 9.09…[…]
===============================================================
摘要是
当您以交互方式运行时,print()
命令会在每个结果上隐式调用。在交互模式下,情况并非如此。您必须显式调用print()
。因此您需要print(dim(db))
。
str()
函数是不同的,因为它通过cat()
创建它的输出并且实际上不返回任何东西。
如果您使用source()
函数运行脚本,您可以设置echp=TRUE
以保持自动打印行为。
此外,您可以考虑使用knitr使其使用R代码制作漂亮的报告,而不是自己设置ink()
和capture. out()
命令。