Разделить код на несколько строк в R-скрипте

r multiline

195974 просмотра

6 ответа

Я хочу разбить строку в сценарии R на несколько строк (потому что это слишком долго). Как я могу это сделать?

В частности, у меня есть такая строка

setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/then/some/more')

Можно ли разбить длинный путь на несколько строк? Я старался

setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/
then/some/more')

с returnключом в конце первой строки; но это не работает.

Благодарю.

Автор: Curious2learn Источник Размещён: 17.05.2019 03:04

Ответы (6)


92 плюса

Решение

Вы разбиваете код не на несколько строк, а на один идентификатор . Есть разница.

Для вашей проблемы попробуйте

R> setwd(paste("~/a/very/long/path/here",
               "/and/then/some/more",
               "/and/then/some/more",
               "/and/then/some/more", sep=""))

что также показывает, что код можно разбить на несколько строк.

Автор: Dirk Eddelbuettel Размещён: 13.06.2011 11:55

124 плюса

Бах, комментарии слишком малы. В любом случае, @Dirk очень прав.

R не нужно сообщать, что код начинается со следующей строки. Он умнее, чем Python ;-) и просто продолжит читать следующую строку всякий раз, когда считает заявление «не законченным». На самом деле, в вашем случае он также перешел на следующую строку, но R принимает возврат как символ, когда он находится между "".

Имейте в виду, вы должны убедиться, что ваш код не закончен. сравнить

a <- 1 + 2
+ 3

с

a <- 1 + 2 +
3

Таким образом, при распределении кода по нескольким строкам вы должны убедиться, что R знает, что что-то идет, либо:

  • оставив скобку открытой, или
  • окончание строки оператором

Когда мы говорим о строках, это все еще работает, но вы должны быть немного осторожнее. Вы можете открыть кавычки, и R будет читать, пока вы не закроете его. Но каждый символ, включая символ новой строки, будет рассматриваться как часть строки:

x <- "This is a very
long string over two lines."
x
## [1] "This is a very\nlong string over two lines."
cat(x)
## This is a very
## long string over two lines.

Вот почему в этом случае ваш код не работал: путь не может содержать символ новой строки ( \n). Так что также объясняет , почему лучше использовать решение с paste()или paste0()предложил Дирк.

Автор: Joris Meys Размещён: 13.06.2011 01:20

29 плюса

Приведенный выше метод Дирка будет абсолютно эффективным, но если вы ищете способ ввести длинную строку, в которой важно сохранить пробел / структуру (например, SQL-запрос с использованием RODBC), есть двухэтапное решение.

1) Перенесите текстовую строку в несколько строк

long_string <- "this
is 
a 
long
string
with
whitespace"

2) R представит кучу \nсимволов. Удалите те strwrap(), которые уничтожают пробелы, согласно документации :

strwrap(long_string, width=10000, simplify=TRUE)

Сказав strwrap обернуть ваш текст в очень, очень длинную строку, вы получите односимвольный вектор без пробелов и символов новой строки.

Автор: Andrew Размещён: 14.11.2012 06:09

12 плюса

Для этого конкретного случая есть file.path:

File <- file.path("~", 
  "a", 
  "very", 
  "long",
  "path",
  "here",
  "that",
  "goes",
  "beyond",
  "80",
  "characters",
  "and",
  "then",
  "some",
  "more")
setwd(File)
Автор: G. Grothendieck Размещён: 08.02.2013 09:06

0 плюса

Как новый пользователь RI, обратите внимание, что ни один из ответов выше не ответил на вопрос !! В ответе был задан вопрос о куске кода, и несколько примеров были сосредоточены на чтении данных. Но вот фрагмент кода, который я вырезал и вставил в консоль Rstudio, и результаты:

poisson.lik <- function (lambda, Trades, Trades_Freq) {+ n <- длина (Trades) + logl <- сумма (Trades * Trades_Freq) log (lambda) - n lambda - Ошибка: неожиданный ввод в: «n <- длина (Сделки) logl <- сумма (Trades * Trades_Freq) log (лямбда) - n лямбда - "sum (log (Trades_Freq)) Ошибка: объект 'Trades_Freq' не найден return (-logl) Ошибка: объект 'logl' не найден } Ошибка: неожиданное «}» в «}»

Я попытался добавить запятую в конце -, я также попытался нажать return и позволить конечной части начать новую строку. Ничего из этого не сработало. Невероятно, но мне пришлось разбить строку на две части в виде патча, как показано ниже, чтобы заставить его работать !! Я просто не могу поверить, что это проблема R.

poisson.lik <- function (lambda, Trades, Trades_Freq) {+ n <- длина (Trades) + logl1 <- sum (Trades * Trades_Freq) log (lambda) - n lambda + logl2 <- sum (log (Trades_Freq) ) + logl <- logl1 + logl2 + return (-logl) +}

Автор: Go C Размещён: 17.02.2019 10:58

-4 плюса

На Mac вы можете нажать:

⎇ and return

Это позволит вам ввести команду в несколько строк, и R не должно волновать.

Автор: Stevancw Размещён: 12.12.2013 04:06
Вопросы из категории :
32x32