Альтернатива scan () в R (здесь стиль документа) - PullRequest
2 голосов
/ 08 апреля 2019

Я ищу способ прочитать текст в векторе, чтобы каждая строка была отдельным элементом, и все это происходило в скрипте R.

Один из способов, который я нашел, был что-то вроде:

bla <- scan(text = "line1
            line2
            line3",
            what = character())

Что правильно дает мне:

> bla
[1] "line1" "line2" "line3"

Однако есть несколько проблем.Во-первых, это отступ.Мне не нужно, но любые функции автоматического отступа просто возвращают его для выравнивания (что я обычно использую).Во-вторых, для этого требуются escape-коды, если я хочу использовать, например, символ двойной кавычки.

Есть ли способ сделать что-то похожее на метод Here-Document (<< EOF) в сценариях R?

Я использую RStudio в качестве своей IDE, работающей в Windows.Предпочтительно, чтобы это был независимый от платформы способ сделать это.


РЕДАКТИРОВАТЬ

Вам нужен текст внутри скрипта R?

Да.

Пример того, что я хочу сделать:

R script here
⋮
bla <- <SOMETHING - BEGIN>
line1
line2
line3
<SOMETHING - END>
⋮
more R script here

Когда опять-таки требуется, чтобы я мог свободно печатать, не беспокоясь об автоматическом отступе, сдвигая строки вперед,и не нужно беспокоиться о кодах выхода при наборе таких символов, как ".

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Обе проблемы можно решить с помощью функции 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 голос
/ 08 апреля 2019

Если вариант создания документа Rmarkdown вместо сценария R является опцией, мы могли бы использовать knitr cat engine

---
title: "Untitled"
output: html_document
---

```{cat engine.opts=list(file='foo')}
line1
line2
"line3"
'line4'
```

```{r}
bla <- readLines("foo")
bla
```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...