我正在寻找一种将文本读入向量的方法,以使每一行都是不同的元素,所有这些都发生在R脚本中。
我发现的一种方式是:
bla <- scan(text = "line1
line2
line3",
what = character())
哪个正确地给了我
> bla
[1] "line1" "line2" "line3"
但是,有几个问题。首先,它是缩进的。我没有必要,但是任何自动缩进功能都会将其弹出以对齐(我通常使用)。其次,如果我想使用双引号,那么这需要转义代码。
是否有一种方法可以在R脚本中执行类似于Here-Document方法(<< EOF
)的操作?
我将RStudio用作IDE,在Windows上运行。最好有一种独立于平台的方法。
编辑
您是否需要在R脚本中包含文本?
是的
我想做的事的例子:
R script here
⋮
bla <- <SOMETHING - BEGIN>
line1
line2
line3
<SOMETHING - END>
⋮
more R script here
再次要求我可以自由键入,而不必担心自动缩进使行向前移动,也不必担心在键入"
之类的代码时使用转义代码。
答案 0 :(得分:2)
我认为这两个问题都可以通过scan
函数和两个小技巧来解决:
scan(text = '
line1
"line2" uses quotation mark
line3
', what = character(), sep = "\n")
Read 3 items
[1] "line1" "\"line2\" uses quotation mark"
[3] "line3"
将引号放在自己的一行中时,自动缩进就没有问题(使用RStudio测试)。如果文本中只有双引号,则可以使用单引号来开始和结束字符对象。如果文本中有单引号,请对字符使用双引号。如果两者兼有,则可能应使用搜索和替换功能使它们统一。
我还添加了sep = "\n"
,所以每一行都是所得字符向量的一个元素。
答案 1 :(得分:1)
如果可以选择编写Rmarkdown文档而不是R脚本,我们可以使用knitr cat
引擎
---
title: "Untitled"
output: html_document
---
```{cat engine.opts=list(file='foo')}
line1
line2
"line3"
'line4'
```
```{r}
bla <- readLines("foo")
bla
```
答案 2 :(得分:1)
从R版本4.0开始,我们有了原始字符串(请参见?Quotes
)
bla <- r"(line1
line2
"line3"
'line4'
Here is indentation
Here is a backslash \
)"
#> [1] "line1\nline2\n\"line3\"\n'line4'\n Here is indentation\nHere is a backslash \\\n"
请注意,尽管它给出一个字符串,而不是单独的元素。我们可以使用strsplit
将其拆分:
bla <- strsplit(bla, "\n")[[1]]
#> [1] "line1"
#> [2] "line2"
#> [3] "\"line3\""
#> [4] "'line4'"
#> [5] " Here is indentation"
#> [6] "Here is a backslash \\"