Как я могу разбить строку в команде R setwd ()? - PullRequest
3 голосов
/ 05 марта 2012

Я стараюсь, чтобы все строки R-скрипта были длиной до 80 символов. Это может оказаться проблемой, когда задействованы строки, но обычно это просто разрыв строки без использования каких-либо специальных символов, например:

plot(x, y, main = "some reeeealy long title, so long that
                   I need to break it into several lines
                   in order to satisfy my ****-retentive
                   self.")

Однако некоторые функции, такие как setwd(), просто не позволяют мне это делать. Например, работает

setwd("/folder/another folder/yet another folder/
      what are you doing, hiding pr0n?/I think I've made my point/")

Возвращает следующую ошибку:

Error in setwd("/folder/another folder/yet another folder/\n
      what are you doing, hiding pr0n?/I think I've made my point/") : 
cannot change working directory

Я пробовал линию торможения в других точках, кроме символа косой черты, но я не мог заставить его работать. Единственный обходной путь, который я смог найти, это запустить

setwd(paste("/folder/another folder/yet another folder/",
            "what are you doing, hiding pr0n?/I think I've made my point/",
            sep = "")

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

Есть ли более элегантный способ добиться этого?

Ответы [ 4 ]

5 голосов
/ 05 марта 2012

В общем, paste - это единственный способ, который я могу себе представить, однако в этом особом случае file.path - лучший выбор, чем paste, поскольку он автоматически обеспечивает правильный символ разделения для вашей платформы.

file.path("/folder", "another folder", "yet another folder",
            "what are you doing, hiding pr0n?",
            "I think I've made my point")
1 голос
/ 05 марта 2012

Еще один взлом: создайте функцию setwd2, которая удаляет символы новой строки и примыкающие пробелы (или, на ваш страх, маскирует встроенную функцию setwd ... сохраняет ее в своем профиле и т. Д.)

setwd2 <- function(dir,debug=TRUE) {
  setwd(gsub("\\n *","",dir))
}

Тест:

setwd2("tmp/
      tmp/
      tmp")
1 голос
/ 05 марта 2012

Элегантные способы достижения этого (или, по крайней мере, те, о которых я могу подумать сейчас):

  1. Добавьте псевдоним в каталог, чтобы вам было легче ссылаться на них в вашем R-скрипте.Например, мои проекты находятся в ~/Documents/Work/Active Projects/Project name/code/, но у меня есть простой псевдоним, такой, что я могу просто использовать ~/code/project name/, когда ссылаюсь на такие файлы / данные.

  2. Вы можете хранить многов вашем options() в .rprofile.Пример: options(Path='/really/long/path/to/something').Тогда вы можете просто использовать setwd(getOption('Path'))

1 голос
/ 05 марта 2012

Вставьте их вместе как:

x <-paste("/folder/another folder/yet another folder/",
      "what are you doing, hiding pr0n?/I think I've made my point/",
      "and for good measure/", sep="")
setwd(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...