我正在尝试使用for循环以使R通过具有多个列的输入表进行循环,每个列与特定变量相对应。

问题描述 投票:0回答:1
提前感谢!

我写的脚本是:

##Call server library(RCurl) library(tidyverse) library(stringr) library(redcapAPI) TableForR<-read.csv("//usershare/users$/aweible1/Profile_Data/Desktop/REDCap Monthly Check/TableForR.csv") for(j in seq_len(nrow(TableForR))){ labelFile <- RCurl::postForm( uri = "https://redcap.uhhospitals.org/redcap/api/", token = TableForR[j,1], content = 'report', report_id = TableForR[j,2], format = 'csv', type = 'flat', rawOrLabel = 'label', exportDataAccessGroups = 'true', .opts = curlOptions(ssl.verifypeer=FALSE) ) backup <- read.csv(text = labelFile, stringsAsFactors = FALSE) write.csv(backup, file = TableForR[j,3], row.names=FALSE) }

i我期望它基于CSV文件中的变量输入,在桌面上的文件夹中吐出273个文件。这将对我有很大的帮助,因为我试图自动化一个API。
    

consisss让

REDCapR::redcap_report()

与服务器交谈,并在其周围编写一个循环。

uri <- "https://bbmc.ouhsc.edu/redcap/api/" ds_control <- tibble::tribble( ~token, ~report_id, ~file_name, "9A81268476645C4E5F03428B8AC3AA7B", 5980L, "a.csv", "9A81268476645C4E5F03428B8AC3AA7B", 6431L, "b.csv" ) download_and_save_report <- function(token, report_id, file_name) { message("Processing report ", ds_control$report_id[i]) d <- REDCapR::redcap_report( redcap_uri = uri, token = token, report_id = report_id )$data readr::write_csv(d, file_name) } for(i in seq_len(nrow(ds_control))) { download_and_save_report( token = ds_control$token[i], report_id = ds_control$report_id[i], file_name = ds_control$file_name[i] ) }
Console&File System的输出
Downloading report 5980 5 records and 5 columns were read from REDCap in 0.1 seconds. The http status code was 200. Downloading report 6431 5 records and 2 columns were read from REDCap in 0.1 seconds. The http status code was 200.

r for-loop
1个回答
0
投票

这个呼吁
purrr::walk()完成与for loop的同一操作。

ds_control |> purrr::pwalk( \(token, report_id, file_name) { download_and_save_report(token, report_id, file_name) } )
(向新用户注释,这个令牌指向一个没有PHI的示例项目。请不要向具有敏感数据的真实项目发布令牌。)


最新问题
© www.soinside.com 2019 - 2024. All rights reserved.