Упрощение ввода строк с помощью strsplit () - PullRequest
1 голос
/ 02 мая 2011

Как мне воспроизвести это:

x <- strsplit('
Statement A
Statement B
Statement C
', '\n')[[1]][-1]

С форматом, который выглядит следующим образом:

x <- someFunction(
Statement A
Statement B
Statement C
)

Я очень устал от копирования и вставки ', '\n')[[1]][-1].Общая цель здесь состоит в том, чтобы избежать необходимости вводить «двойные кавычки» вокруг каждой строки.

Ответы [ 2 ]

4 голосов
/ 02 мая 2011

Одна вещь, которую вы можете сделать, это использовать scan():

x <- scan(what="character",sep="\n")
Statement A
Statement B
Statement C

x
[1] "Statement A" "Statement B" "Statement C"

Хотя это просто заменяет одну вещь для копирования пасты другой. Если вы не хотите этого, почему бы просто не создать функцию-обертку, которая будет делать то, что вы говорите выше?

spl <- function(x)
{
foo <- unlist(strsplit(x,'\n'))
foo[foo!=""]
}

spl('
Statement A
Statement B
Statement C
')
[1] "Statement A" "Statement B" "Statement C"

EDIT: Если вы действительно хотите избежать знаков ', то я думаю, что короткая именованная функция-обертка вокруг оператора scan() - ваш лучший выбор:

foo <- function(x)scan(what="character",sep="\n")

x <- foo()
Statement A
Statement B
Statement C

Вы могли бы что-то придумать с помощью функции, используя знак ... и match.call(), чтобы получить это как символ, но когда вы используете пробелы, которые больше не работают (так как они являются недопустимыми именами объектов, и вам нужны `знак.

2 голосов
/ 02 мая 2011

unlist делает то, что вы хотите?

someFunction <- function(txt) {
  unlist(strsplit(txt, "\n"))
}

#Dummy data
txt <- "Statement A
Statement B
Statement C"

> z <- someFunction(txt)
> all.equal(x,z)
[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...