在网络驱动器上查找文件的绝对路径

7
我有些困难在于编织一个位于网络驱动器上的markdown文件。 我使用rmarkdown :: render()来编织该文件。 我已经追踪到问题是由 file_path_as_absolute()函数引起的。
我在我的工作目录中有一个名为foo.Rmd的markdown文件。
> list.files()
 [1] "$RECYCLE.BIN"                               "2014-11-04-popular-wagers-distribution.pdf"
 [3] "db-connection.R"                            "desktop.ini"                               
 [5] "figure"                                     "foo.md"                                    
 [7] "foo.Rmd"                                    "game-popularity.R"                         
 [9] "My Data Sources"                            "player-data-game-monitoring.tsv"           
[11] "player-linking.R"                           "player-pca.R"                              
[13] "query-1.sql"                                "query-2.sql"                               
[15] "R"                                          "report-test-2.Rmd"                         
[17] "report-test.md"                             "report-test.Rmd"                           
[19] "report-test.xxx"                            "SQL Server Management Studio"              
[21] "test.md"                                    "test.R"                                    
[23] "test.Rmd"                                   "Thumbs.db" 

我可以找到绝对路径:

> normalizePath("foo.Rmd")
[1] "\\\\dernetapp02\\h$\\users\\AndrewCo\\myCitrixFiles\\Documents\\foo.Rmd"
Warning message:
In normalizePath(path.expand(path), winslash, mustWork) :
  path[1]="foo.Rmd": Access is denied

尽管会生成警告,但这个方法是有效的。我不确定为什么会出现警告,因为我肯定对该文件具有读写权限。

但调用file_path_as_absolute()(它只是normalizePath()的包装器)会将该警告转换为错误。

> tools::file_path_as_absolute(input)
Error in normalizePath(path.expand(path), winslash, mustWork) : 
  path[1]="foo.Rmd": Access is denied

我相信问题与文件存储在网络驱动器上有关,因为当我使用本地驱动器上的文件时,我没有遇到这个问题。但是,如上所述,我确实可以读写此文件。

有人对此问题有什么想法吗?更重要的是,有可能的解决方案吗?

根据以下建议,我尝试将其映射到网络驱动器:

> system("net use s: \\\\dernetapp02\\h$")

这似乎很有前途,但最终结果却相同:
> normalizePath("s:\\users\\AndrewCo\\myCitrixFiles\\Documents\\foo.Rmd")
[1] "s:\\users\\AndrewCo\\myCitrixFiles\\Documents\\foo.Rmd"
Warning message:
In normalizePath(path.expand(path), winslash, mustWork) :
  path[1]="s:\users\AndrewCo\myCitrixFiles\Documents\foo.Rmd": Access is denied

谢谢!

最好的祝福, 安德鲁。


2
你在使用Windows系统吗?如果是的话,可以将网络路径映射到虚拟驱动器上。使用system("net use s: \\\\mynetwork\\path")来设置虚拟驱动器,使用system("net use s: /Delete")来删除它。 - jdharrison
谢谢!那听起来是个不错的建议。我已经用结果更新了我的查询。 - datawookie
1
现在已经是2020年了,我仍然遇到这个问题。StackOverflow上有许多类似的问题,但没有答案。Rstudio应该紧急解决这个问题。 - LucasMation
2个回答

1

我也遇到了同样的问题。最后我把项目移动到本地文件夹,并使用 file.copy 命令复制生成的文件。

这是一种通用的解决方案,如果有人发现更好的方法,请告诉我。


0

我知道这是一个老问题,但我刚遇到了同样的问题。对我来说,通过Windows资源管理器映射网络驱动器解决了问题。

重要的是关闭当前的R会话,并从映射的驱动器位置重新打开Rproj文件。

从那里开始一切都正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接