【问题标题】:R | Assign Cat() output to variable右 |将 Cat() 输出分配给变量
【发布时间】:2018-05-18 07:08:52
【问题描述】:

我正在尝试删除生成的“\”,所以我运行 cat() 来清除它。但是需要将该输出分配给一个变量,以便稍后在 gsubfn 字符串中匹配。

>topheader <-'<div id="editor1" class="shinytinymce shiny-bound-input" 
style="resize: none; width: 100%; height: 100%; border-style: none; 
background: gainsboro;">'

>topheader
[1] "<div id=\"editor1\" class=\"shinytinymce shiny-bound-input\" 
style=\"resize: none; width: 100%; height: 100%; border-style: none; 
background: gainsboro;\">"

>cat(topheader)
[1] <div id="editor1" class="shinytinymce shiny-bound-input" style="resize: 
none; width: 100%; height: 100%; border-style: none; background: 
gainsboro;">

> test<-cat(topheader)


> test
NULL

【问题讨论】:

  • 你不能。 cat 总是返回 NULL。它严格用于打印到控制台/文件。这些反斜杠只是为了逃避内部引号。它们实际上并不存在。
  • @RichScriven 实际上您可以使用capture.output() 分配来自cat 的输出。然而,这在这里无济于事,因为真正的问题是其他的......(见下一条评论)。
  • @DannyRamirez 你有一个基本的误解。 \ 字符实际上并不存在于字符串中 - 当您将输出打印到控制台时,print 只是以这种方式显示它们。
  • 试试nchar('\"editor1\"')。它输出 9 而不是 11。
  • 如果你使用capture.output,你会遇到同样的问题。

标签: r string cat


【解决方案1】:

正如 cmets 中已经指出的那样,将 cat 的输出分配给变量对您没有帮助,因为 \ 字符(称为 escape characters)实际上并不存在于字符串中.当您将字符串输出到控制台时,它们只是以这种方式打印。

但是,为了其他出于不同原因尝试分配 cat 输出的人的利益,有必要提供更完整的答案。 cat 确实具有一些用于格式化输出的有用功能,有人可能需要将其存储在变量中。在这些情况下,我们可以使用capture.output 来实现这一点。例如,

cat(paste(letters, 100* 1:26), fill = TRUE, labels = paste0("{", 1:10, "}:"))

产生以下输出,方便地分成控制台宽度的编号行:

# {1}: a 100 b 200 c 300 d 400 e 500 f 600 g 700 h 800 i 900 
# {2}: j 1000 k 1100 l 1200 m 1300 n 1400 o 1500 p 1600 
# {3}: q 1700 r 1800 s 1900 t 2000 u 2100 v 2200 w 2300 
# {4}: x 2400 y 2500 z 2600

我们可以通过

捕获这个输出
x = capture.output(
      cat(paste(letters, 100* 1:26), fill = TRUE, labels = paste0("{", 1:10, "}:"))
    )

创建一个字符向量 x,每个元素对应于输出的一行:

# [1] "{1}: a 100 b 200 c 300 d 400 e 500 f 600 g 700 h 800 i 900 "
# [2] "{2}: j 1000 k 1100 l 1200 m 1300 n 1400 o 1500 p 1600 "     
# [3] "{3}: q 1700 r 1800 s 1900 t 2000 u 2100 v 2200 w 2300 "     
# [4] "{4}: x 2400 y 2500 z 2600"  

如果您愿意,可以将此向量折叠成一个用换行符分隔的字符串:

x = paste0(x, collapse = '\n')

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 2017-09-28
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多