【问题标题】:output colored text in multiple output of function in R在R中函数的多个输出中输出彩色文本
【发布时间】:2019-12-22 03:43:46
【问题描述】:

我是在 R 中编写函数的新手。当一个函数要创建多个输出时,我将这些输出聚合到一个列表中并让函数返回这个列表。此方法还允许输出简单文本。但是,我似乎无法打印彩色文本。

一个例子:

library (crayon)

my_function <- function (a = 3, b = 6) {
    first_result <- a * 3
    second_result <- b / a
    print (list (first_result, 
                 second_result, 
                 "my_text"))
}

my_function()

出来(对我来说没问题):

[[1]]
[1] 9

[[2]]
[1] 2

[[3]]
[1] "my_text"

现在我想看到彩色的“my_text”(有效):

cat (green ("my_text")) 

但是,当放入列表时,行为不是我想要的 - 文本首先输出,列表中的第一个参数紧随其后:

x <- 5
list (x, cat (green ("my_text")))

比较:

list (x, "my_text")

这种行为对我来说有点不走运——我希望函数在结果之后显示一行彩色文本。我的尝试

my_function <- function (a = 3, b = 6) {
    first_result <- a * 3
    second_result <- b / a
    print (list (first_result, 
                 second_result, 
                 cat (green ("my_text"))))
}

my_function()

当然没有成功。不幸的是,我对在 R 中打印彩色文本没有其他想法。感谢任何帮助。

【问题讨论】:

  • cat() 用于将结果输出到控制台,它返回值NULL。因此,当 R 解释您​​的 list() 调用时,它会看到 cat() 并立即执行其操作并将“我的文本”输出到控制台,然后将 NULL 作为第三个元素隐藏起来。 “我的文字”是结果的相关部分,还是更多地提醒用户?
  • 感谢您的澄清。 “我的文本”并不是结果的真正相关部分。我的目标是使用彩色文本作为函数不同结果的标题(我知道将这些“标题”作为单个对象存储在列表中并不是最优雅的方法 - 由于我对编程的了解有限,我根本没有其他方法想法...)

标签: r function text colors


【解决方案1】:

Cat 不返回变量,而是返回NULL

绿色输出是否需要在列表中?如果没有,那么这可以工作:

my_function <- function (a = 3, b = 6) {
first_result <- a * 3
second_result <- b / a
print (list (first_result, 
           second_result 
           ))
cat(green ("my_text"))
}

my_function()

我尝试使用 capture.output(),但它只捕捉文本而不捕捉颜色。

print(capture.output(cat(green ("my_text"))))

我也尝试使用 R markdown (https://rmarkdown.rstudio.com/index.html),然后你失去了颜色。所以我认为目前不可能

【讨论】:

  • 当然,这很好用。但是,当将函数的结果存储在对象中时,当我调用相应的对象时,将省略彩色文本。理想情况下,这不应该发生。
猜你喜欢
  • 2021-09-28
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多