【问题标题】:Is there a way to get R print ouput as string?有没有办法将 R 打印输出作为字符串?
【发布时间】:2021-02-28 15:20:12
【问题描述】:

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

output_string = print(object)

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

我认为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) 有一些东西,我希望这会做我想做的事,但它似乎只是复制了对象。

【问题讨论】:

  • help("capture.output")

标签: r string representation


【解决方案1】:

我想这可能是你所追求的?

# 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)

【讨论】:

    【解决方案2】:

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

    来自?sink

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

    【讨论】:

    • 好点......虽然这并没有给我print()作为变量的输出,但如果我需要直接输出,它仍然是一个有用的选项来规避需要它作为变量.
    • True - 但也许(作为一种解决方法)您可以保存输出并将其再次读入 R 并将其保存为字符串变量?不过,不确定这是否是个好主意。但如果你真的需要字符串变量中的输出...
    • ... 然后我将上面的选项与capture.output() 一起使用,效果很好:)
    猜你喜欢
    • 2021-05-29
    • 1970-01-01
    • 2022-01-22
    • 2019-11-14
    • 2011-01-15
    • 2023-04-07
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多