将 Onedrive 文件读取到 R

问题描述 投票:0回答:2

这个问题与这个问题非常相似:Reading OneDrive files to R

但稍微有点扭曲:

我有一个打开数据库连接的 R 脚本。 大致就是这个代码(为了保护无辜而更改了名称):

jdbcDriver <- JDBC(driverClass="oracle.jdbc.driver.OracleDriver", classPath="C:/Users/JohnDoe/OneDrive - Job Corporation/Documents/Data/jar files/ojdbc8.jar")  
jdbcConnection <- dbConnect(jdbcDriver, "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=place.company.com)(PORT=1234))(CONNECT_DATA=(SERVICE_NAME=ghjed)))", "abc_thing_prod_ro4", "AKabc$VxqcasdfdsTDYjZsadfcdy-pxEUW")  

如您所见,在第一行中,我链接到代码所需的“.jar”文件的位置。 它已经在我的 OneDrive 中,并且因为我的 OneDrive 在本地映射到我,所以此代码运行良好并打开了连接。

问题是我需要能够与其他人共享此 R 代码,并且让代码在他们的计算机上运行时仍然有效。 (实际上,最终,所有这些 R 代码实际上都是在 powerBI 文件内运行)。 换句话说,我想我想要一行代码来从 OneDrive 读取/下载文件,以便它可以在其他计算机上运行。

在另一个问题的这个解决方案中,看起来它大致可以做到这一点。 看起来他的答案会下载 onedrive 上并已链接到的 csv,但一位评论者指出的问题是“如果您使用 OneDrive for Business 并且您的管理员已禁用通过链接使用公共文件共享”这是行不通的。 嗯,这正是我的情况。

话虽这么说,唯一运行此代码的人在我的组织内,并且允许从我共享的 Onedrive 链接下载。 当我尝试按原样运行解决方案代码时,出现错误“http 状态为‘403 禁止’

我只是运气不好吗? 如果我们的管理员不喜欢公共链接共享,有没有办法让 R 从 onedrive 链接读取(在其他计算机上运行时)?

更新以进一步澄清(希望如此)

重申一下,当我和我的同事通过将文件保存到我们都可以访问的 Onedrive 位置来共享 R 中的文件时,R 文件将包含指向 Onedrive 位置的代码行(我们应该能够访问),像这样的东西:

    source("C:/Users/123456/OneDrive - Lifespan Corporation/PowerBI/Test_Auto.R")

问题是,当我查看该文件时,它对我来说是这样的: enter image description here

即文件路径不同。 所以...即使我可以访问 onedrive 中的这些文件,如果我尝试在 R 中运行该行代码,它会失败并且我得到这个:

enter image description here

重申我的问题:

R 中是否有一种方法可以写入 Onedrive 文件路径或执行某些操作,无论哪个用户尝试运行代码,它都会允许访问。

我尝试使用文件的“web”地址,如下所示:

source("https://company-my.sharepoint.com/personal/123456_company_org/Documents/PowerBI/Test_Auto.R")

并遇到类似的错误。 但如果我将该行粘贴到浏览器中,它就会下载该文件,所以我绝对可以访问。

r onedrive
2个回答
2
投票

根据我们在评论中的转换:

在您的本地环境中,您有一个如下所示的文件夹:

C:/Users/Mako/OneDrive/file.jar

如果您与协作者共享该文件夹并且他们在本地环境中同步该文件夹,他们将拥有如下路径:

C:/Users/OtherUser/OneDrive/file.jar

因此,当

OtherUser
尝试访问路径
C:/Users/Mako/OneDrive/file.jar
时,他们会收到“没有这样的文件或目录”错误。

如果我们首先根据每个用户的已知本地环境路径验证路径,或者我们可以动态构建符合通用结构的路径,我们就可以解决这个问题。

动态地,我们可以使用像

sprintf()
这样的函数来构建基于用户的路径:

sprintf('C:/Users/%s/OneDrive/file.jar', Sys.info()[["user"]])
  
[1] "C:/Users/Mako/OneDrive/file.jar"

或者静态地我们可以指定两个路径:

path1 <- 'C:/Users/Mako/OneDrive/file.jar'
path2 <- 'C:/Users/OtherUser/OneDrive/file.jar'

然后检查有效路径:

if (file.exists(path1)) {
  path <- path1
} else if (file.exists(path2)) {
  path <- path2
} else {
  print("Error, no valid path found")
}

0
投票

试试这个

path = paste0(Sys.getenv("USERPROFILE"),
              "/OneDrive - Job Corporation/Documents/Data/jar files/ojdbc8.jar")
© www.soinside.com 2019 - 2024. All rights reserved.