【问题标题】:How does R (RGui) parse multiline character strings?R(RGui)如何解析多行字符串?
【发布时间】:2020-02-02 06:12:19
【问题描述】:

RGui(Windows;R 版本 3.5.3)似乎会忽略出现在字符串行首的制表符(按 CTRL+R通过代码行):

# REPLACE "<TAB>" WITH AN ACTUAL TAB CHARACTER TO GET THE CODE INTENDED BELOW.
foo <- 'LINE1
<TAB>LINE2
<TAB>LINE3
'

foo

# [1] "LINE1\nLINE2\nLINE3\n"

longstring <- removetabsatbeginningoflines('
<TAB>Sometimes I have really long strings that I format
<TAB>so that they read nicely (not with too long of a
<TAB>line length). Tabs at the beginning of the lines
<TAB>within a string preserve my code indenting scheme
<TAB>that I use to make the code more readable. If the
<TAB>tabs are not removed automatically by the parser,
<TAB>then I need to wrap the string in a function that
<TAB>removes them.')

当上述代码是来自文件的source'd 时,制表符将被保留。

  1. 为什么 RGui 不保留制表符?
  2. 这种行为记录在哪里?
  3. RGui 在解析(多行)字符串方面还有哪些其他非直观的相关行为?

【问题讨论】:

  • 无法在R 3.6.0复制它
  • 您可以用\t 表示&lt;TAB&gt; 以制作可重现的示例。我也无法重现 R 3.4.2 或 R 3.5.1 的问题。
  • @akrun 我正在从文件中运行代码。更具体地说,我使用 RGui (Windows) 并按 CTRL+R 来运行示例代码。我刚刚在 RStudio(v1.1.463 和 R 3.5.3)中尝试了类似的东西(按 CTRL + Enter)并得到了不同的结果(标签被保留)。
  • @thelatemail 我不太确定\t。文件中的序列\t 是反斜杠,后跟t。我有制表符(ASCII 十进制代码 9)。
  • @AnaNimbus - 当你像你展示的那样在 R 控制台输入它时不是这样。 foo &lt;- 'LINE1\n\tLINE2\n\tLINE3' 应该代表您描述的数据。但你是对的,RGui 文本编辑器在提交代码时不尊重标签。

标签: r string parsing multiline rgui


【解决方案1】:

我在任何地方都找不到这方面的记录,所以这是一个值得公开回答的问题。

如果您使用的是 RGui 的内置“R 编辑器”,则所有通过 Tab 键输入的 Tab 字符,或者已经存在于您已在“R 编辑器”中打开的文本文件中,在使用 Ctrl-R 提交时将得到尊重(这在示例中很难表示,因为选项卡已从答案中剥离) .

我认为“R 编辑器”不适合用于严肃的代码编辑,您最好使用专用 IDE(例如 RStudio)或更全功能的编辑器(例如 Emacs、Notepad++)。

在 RGui 中编辑时,您可以通过手动将选项卡替换为 \t 来绕过 RGui 中的此问题,但如果您想在文件中保留实际的选项卡,这可能不合适。使用source()直接运行存储在文本文件中的代码时,标签也会被正确处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多