在R中使用macs别名文件夹

时间:2018-11-03 12:25:10

标签: r macos directory-structure

我正在研究我的数据存储结构,并认为有一个包含原始数据的文件夹并通过别名文件夹将其从那里分发到r项目文件夹是一个好主意。但是似乎R不能理解别名文件夹,因为它将其显示为一个对象,但只是一个文件夹。 有解决这个问题的好方法吗?还是我应该简单地使用邮件文件夹作为每个项目的工作目录,并通过子文件夹结构获取脚本?

Google似乎没有理会这个问题,所以我想也许有人可以帮忙:)

谢谢! 塞巴斯蒂安

1 个答案:

答案 0 :(得分:0)

您应该考虑使用跨平台符号链接,而不是通过Finder操作创建的macOS本机别名文件。转到终端/ iTerm提示符并执行:

$ man ln

了解更多信息。

但是,您可以使用R中的macOS别名文件。版本3二进制别名文件格式仍然有点不透明,我不想在一个下雨的11月下午深入研究二进制格式,但是您可以使用mactheknife包通过applescript完成此操作:

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的:-)

更新

我在resolve_alias()包中添加了mactheknife函数 ,所以现在您可以这样做:

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

如果可以安装mactheknife