我希望在私有github文件夹中获取一些R脚本,并通过R在某些环境中使用它。
在使用公共github文件夹时,这两个命令均可完成:get_URL和source_url(来自devtools)。
但是,当文件夹为私有文件夹并且需要身份验证时,事情会变得复杂。
是否有一种方法可以完成此操作,并将登录详细信息放入这些功能中,以便在需要进行某些github认证的情况下自动通过用户名和密码?
谢谢前进,
Tamas
答案 0 :(得分:0)
TL; DR:可以,请参见下面的代码。
这是供任何人将来使用的方法,该方法可使用httr
和可选的devtools
从私有Github存储库中获取R脚本。
我进行了足够的搜索以找到解决方案的各个部分,然后将它们全部缝合在一起。因此功劳归功于其他多个线程和网站。
请参见以下代码:
library(httr)
# Source R script from Github
script <-
GET(
url = "https://api.github.com/repos/{user_name}/{repo_name}/contents/{script_name}.R",
authenticate({github_email}, {github_personal_access_token}), # Instead of PAT, could use password
accept("application/vnd.github.v3.raw")
) %>%
content(as = "text")
# Evaluate and parse to global environment
eval(parse(text = script))
这可能仅适用于您拥有的私人仓库。我不确定它是否适用于与您共享的私人仓库。
See this link创建Github个人访问令牌(PAT)。如果需要,还可以将其另存为R中的环境变量。 devtools::github_pat()
在这里很有用。
您的电子邮件和PAT(或密码)都必须用引号引起来。
答案 1 :(得分:0)
感谢Ethan和其他消息来源,我可以解决这个问题。
macbook@user:~$ touch .Reviron
在此文件上,像这样写您的个人令牌:
macbook@user:~$ nano .Reviron
GITHUB_PAT=YOUR PERSONAL TOKEN
Sys.getenv("GITHUB_PAT")
您还可以使用以下方法在R上编辑令牌:
usethis::edit_r_environ()
别忘了重新启动R以保存您的更改。
3。最后,在R上,这些行代码将从私人仓库中加载数据
library(httr)
req <- content(GET(
"https://api.github.com/repos/you_group/your_repository/contents/your_path_to your_doc/df_test.Rdata",
add_headers(Authorization = "token YOUR_TOKEN")
), as = "parsed")
tmp <- tempfile()
r1 <- GET(req$download_url, write_disk(tmp))
load(tmp)