【发布时间】:2020-10-29 10:34:47
【问题描述】:
我有一些可以在 Mac 上运行的 R 代码,但其他人试图在 Windows 上运行它,但它似乎不起作用。我一直使用的代码是:
for(i in 1:length(SNPs.needproxies)){
print(i)
system(paste0("curl -k -X GET 'https://ldlink.nci.nih.gov/LDlinkRest/ldproxy?var=",SNPs.needproxies[i],"&pop=MXL&r2_d=r2&token=",token,"' > ", dir,"out.",SNPs.needproxies[i],".txt"))
}
如果我尝试在 Windows 上运行它,我会收到错误
https 不支持或禁用'。
我们已经缩小了问题的范围,似乎应该将地址中的单引号替换为双引号。然而,由于这是在 paste0() 函数中,它认为这是另外一回事,所以我们想用反斜杠转义双引号,即,
\"https://ldlink.nci.nih.gov/LDlinkRest/ldproxy?var=",SNPs.needproxies[i],"&pop=MXL&r2_d=r2&token=",token,"\"
这种方法的工作原理是它提供了我们想要的输出,但它应该将它打印到一个名为 dir/out.file.txt 的文件中,但它不执行此部分。
SNPs.needproxies 是:
SNPs.needproxies <- c("rs709692","rs9659182","rs13064990","rs11130017","rs9832922" ,"rs36120363","rs4727815","rs7994762","rs72772387")
我有一个网站令牌,但无法共享,但它存储在名为令牌的对象中。
【问题讨论】:
-
可能不是
paste0()的结果不同,而是系统命令shell的行为不同? -
@jogo 谢谢,是的,我确实也这么认为,但也不确定如何解决这个问题。由于报价问题,我认为它可能是 paste0(),所以无论哪种方式都欢迎建议
-
这行得通吗?
u <- sprintf("https://ldlink.nci.nih.gov/LDlinkRest/ldproxy?var=%s&pop=MXL&r2_d=r2&token=%s", "rs709692", token); system2("curl", c("-k", "-X", "GET", u)) -
与其使用curl,不如使用R的内置
download.file函数?您似乎没有使用特定于 curl 的功能,除了-k之外,但这不是必需的(连接 is 安全 - 至少在访问 URI 时没有API 令牌;如果提供 API 令牌会改变这一点,我会感到非常惊讶)。