Использовать псевдонимы папок в R - PullRequest
0 голосов
/ 03 ноября 2018

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

Google, похоже, не замечает этого вопроса, поэтому я подумала, что кто-то здесь может помочь:)

Спасибо! Себастьян

1 Ответ

0 голосов
/ 03 ноября 2018

Вам следует рассмотреть возможность использования межплатформенных символических ссылок по сравнению с собственными псевдонимами macOS, созданными с помощью операций Finder. Перейдите к приглашению Terminal / iTerm и выполните:

$ man ln

чтобы узнать больше.

Тем не менее, вы можете работать с псевдонимами macOS из R. Формат двоичного псевдонима версии 3 по-прежнему непрозрачен, и мне не хотелось копаться в двоичных форматах дождливым ноябрьским днем, но вы можно использовать пакет mactheknife, чтобы сделать это с помощью applecript:

library(mactheknife) # github or gitlab hrbrmstr/mactheknife

resolve_alias <- function(path) {
  mactheknife::applescript(sprintf('
set myPosix to POSIX file "%s"
tell application "Finder"
   set myPath to original item of item myPosix
end tell
set myPOSIXPath to POSIX path of (myPath as text)
return myPOSIXPath
', path.expand(path)))
}

(resolve_alias("~/Desktop/data-alias"))
## [1] "/Users/bob/data/"

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

applescript <- function (script_source, extra_args = c(), params = c()) {
  script_source <- paste0(script_source, collapse = "\n")
  tf <- tempfile(fileext = ".applescript")
  on.exit(unlink(tf), add = TRUE)
  cat(script_source, file = tf)
  osascript <- Sys.which("osascript")
  args <- c(extra_args, tf, params)
  res <- system2(command = osascript, args = args, stdout = TRUE)
  invisible(res)
}

, который представляет собой базу R без каких-либо зависимостей (за исключением того, что зависит от macOS: -)

UPDATE

Я добавил resolve_alias() функцию в mactheknife пакет, так что теперь вы можете просто сделать:

mactheknife::resolve_alias("path-to-alias-file")

, если вы можете установить mactheknife.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...