【问题标题】:Is there an R function for applying color to digits in a vector?是否有用于将颜色应用于矢量中的数字的 R 函数?
【发布时间】:2021-02-09 22:27:22
【问题描述】:

我正在生成由 18 个随机数组成的 8 个独立向量,并且我想将 11 以内的所有数字用颜色编码为红色,而其他所有数字都可以保持黑色。

trial1 <- sample(0:99, 18, repeat = TRUE) 执行了 8 次,每次都更改试用号。

 if (trial1<=11) {
     print(col ="red")
 } else {
     print(col = "black")

但这会引发错误消息,我不知道我在哪里搞砸了。我正在尝试将所有 18 个数字显示为红色或黑色。这可能吗,我该怎么做?

【问题讨论】:

  • 您是在谈论打印到控制台还是其他地方(例如,在 Rmarkdown 文档中)。如果您正在谈论在 R 控制台中打印,那么 crayon 包已经涵盖了您,see this dupe
  • 错误是因为print 需要一个参数来打印,该参数是第一个未命名的参数或命名为xprint(col = "black") 没有告诉它要打印什么。 (而且,没有col 参数,但print 愿意让它滑动并忽略它,只要你给它一些打印的东西......)。您可以随时查看帮助页面 ?print 以查看函数接受哪些参数。

标签: r vector


【解决方案1】:

正如 cmets 中所说,您不能这样做 print(col = ...)。但是,您可以将其存储在向量中:

> trial1 <- sample(0:99, 18)

> col1 <- ifelse(trial1 <= 11, "red", "black")

> trial1
 [1] 41 77 81 87 84  3 32 14 86 20 25 37 67 45 17 98 31 53

> col1
 [1] "black" "black" "black" "black" "black" "red"   "black" "black" "black" "black" "black" "black"
[13] "black" "black" "black" "black" "black" "black"

另外,我不知道你说的repeat = TRUE 是什么意思。也许你的意思是replace = TRUE

【讨论】:

  • 顺便说一句,您也可以在数据框中进行操作。
【解决方案2】:

您可以将‘crayon’ package 与 R 的ifelse 结合使用:

trial1 = sample(0 : 99, 18L, replace = TRUE)

cat(toString(ifelse(trial1 <= 11, crayon::red(trial1), trial1)), '\n')

“蜡笔”本身不打印,它生成ANSI escape sequences,许多终端将其解释为颜色命令。当传递给cat 时,会生成彩色输出(如果终端支持的话)。

请注意,这里需要catmessagewriteLines 之类的命令——print 不起作用。原因是,与它的名字所暗示的相反,print 函数实际上并没有打印正确的输出。相反,它创建(并打印)R 对象的调试表示。这就是为什么它总是在向量旁边打印左侧的索引,以及为什么它打印被"…"包围的字符串。

如果您想在脚本中生成输出,print 几乎是总是错误的选择。相反,您将使用上述功能之一。

【讨论】:

    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 2021-10-20
    • 2019-09-17
    • 2023-03-20
    • 2014-05-02
    • 2017-01-20
    • 1970-01-01
    • 2020-05-23
    相关资源
    最近更新 更多