gpt4 book ai didi

r - curl 命令在 Mac 和 Windows 上的行为不同

转载 作者:行者123 更新时间:2023-12-03 23:59:16 33 4
gpt4 key购买 nike

我有一些可以在 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 not supported or disabled'.

我们已经缩小了问题的范围,似乎应该将地址中的单引号替换为双引号。然而,由于这是在 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")

我有一个网站 token ,但无法共享,但它存储在名为 token 的对象中。

最佳答案

1。带有 curl -o 选项的 system()

在注意到 Windows 上的 curl 要求 https 地址用双引号而不是单引号括起来之后,我将完全避免剩余的管道问题并使用 curl 中的 -o 选项来指定如果您坚持写出命令,则要写入结果的文件:

system(paste0("curl -k -X GET \"https://ldlink.nci.nih.gov/LDlinkRest/ldproxy?var=", SNPs.needproxies[i], "&pop=MXL&r2_d=r2&token=", token, "\" -o out.", SNPs.needproxies[i], ".txt"))

2。 curl_download()

或者,R 有一些基于 curl 的包来处理所有这些细节,例如 curl:

library(curl)
url <- sprintf("https://ldlink.nci.nih.gov/LDlinkRest/ldproxy?var=%s&pop=MXL&r2_d=r2&token=%s", SNPs.needproxies[i], token)
curl_download(url, sprintf("out.%s.txt", SNPs.needproxies[i]))

3。 file.download()

您也可以按照 Konrad 的建议在这种情况下使用 file.download():

url <- sprintf("https://ldlink.nci.nih.gov/LDlinkRest/ldproxy?var=%s&pop=MXL&r2_d=r2&token=%s", SNPs.needproxies[i], token)
download.file(url, sprintf("out.%s.txt", SNPs.needproxies[i]))

4。获取()

您也可以使用 httr 库中的 GET():

library(httr)
u <- "https://ldlink.nci.nih.gov/LDlinkRest/ldproxy"
q <- list(var = SNPs.needproxies[i],
pop = "MXL",
r2_d = "r2",
token = token)
f <- sprintf("out.%s.txt", SNPs.needproxies[i])
GET(url = u, query = q, write_disk(f))

5。 LDproxy()

注意,似乎有一个 R 包专门用于连接到此 API here .在您的情况下,代码将是:

library(LDlinkR)
LDproxy(snp = SNPs.needproxies[i],
pop = "MXL",
r2d = "r2",
token = token,
file = sprintf("out.%s.txt", SNPs.needproxies[i]))

关于r - curl 命令在 Mac 和 Windows 上的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64589356/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com