有没有办法将 R 打印输出作为字符串?

Is there a way to get R print ouput as string?

有没有一种简单的方法可以将 print 的输出作为字符串变量获取? 类似于:

output_string = print(object)

函数print()恕我直言,有一种相当“智能”的方式将对象分别表示为字符串的对象信息。因此,能够处理此输出将很有用。

我认为 print() 所做的只是在调用它的对象上调用 toString() 方法。但是,toString(object) 会给出不同的结果,我想获取 print(object) 生成的字符串...只是不作为控制台的输出,而是存储在变量中。


我的背景: 我创建了一个随机森林模型。做 print(rf) 给了我一些关于模型的基本统计数据,我想将其写入日志文件,而 toString(rf) 给了我一个巨大的字符串,其中似乎是完整的实际字符串表示树(分裂等)。所以我想做:

rf = randomForest(...)
fileConn = file("rf.log")
writeLines(c(">>> random forest:", print(rf) ), fileConn)
close(fileConn)

我试图从 docs 获得一些关于此的信息,但这似乎不是一个广告功能。关于 invisible(rf),我希望这会做我想做的事,但它似乎只是复制了对象。

我想这可能是您想要的?

# As vector:
res_vec <- capture.output(
  print(df)
)

cat(res_vec)

# As scalar:
res_scalar <- paste0(capture.output(
  print(df)
), collapse = "\n")

cat(res_scalar)

数据:

df <- data.frame(Mason_Id = sample(c("Mason1", "Mason2","Mason3","Mason4","Mason5","Mason6"), 12, T),
Registration_Date = c("01-08-2020", "01-08-2020","05-08-2020","07-08-2020",
"02-09-2020", "02-09-2020","02-09-2020",
"03-09-2020","04-09-2020","01-10-2020","02-10-2020",
"06-10-2020"), Token_Count = runif(12, 10, 100), stringsAsFactors = FALSE)

您还可以查看 sink() 函数,因为它将所有输出捕获到通常显示在控制台中的文本文件中。

来自 ?sink :

sink("sink-examp.txt")
i <- 1:10
outer(i, i, "*")
sink()