【问题标题】:How to save server responses to a dynamic variable如何将服务器响应保存到动态变量
【发布时间】:2023-02-14 23:25:52
【问题描述】:


datasets_uids <- c("b0ozQvcc7nP","D9CrlbX7KBV")
服务器 <- c("url1","url2")

for (i in 1:length(datasets_uids)) {
  
  for(j in 1:length(servers)){
    
    assign(paste("postOrgUnitsToDataset",j,sep="_"),httr::POST(paste0(servers[j],"dhis/api/dataSets/",datasets_uids[i],"/organisationUnits"),                                       body=httr::upload_file("file.json"),
                                      httr::verbose(),
                                      httr::authenticate("username","password", type = "basic"),
                                      httr::content_type("application/json"),
                                      httr::progress("up"),
                                      httr::set_config(httr::config(ssl_verifypeer = 0L))
    ))
  }
}


我希望将所有四个回复保存如下

postOrgUnitsToDataset_1=response1
postOrgUnitsToDataset_2=response2
postOrgUnitsToDataset_3=response3
postOrgUnitsToDataset_4=response4


但是响应被覆盖并保存在以下两个响应中

postOrgUnitsToDataset_1=response3
postOrgUnitsToDataset_2=response4


那么我如何修改上面的代码以将所有回复保存在postOrgUnitsToDataset_1,postOrgUnitsToDataset_2,postOrgUnitsToDataset_3,postOrgUnitsToDataset_4

【问题讨论】:

    标签: r


    【解决方案1】:

    使用assign 创建全局变量通常不是一个好主意。在 R 中处理列表中的数据要容易得多。一种迭代创建列表的方法是lapply。在这里,我们首先创建所有 URL,然后为每个 URL 发送一个请求

    datasets_uids <- c("b0ozQvcc7nP","D9CrlbX7KBV")
    servers <- c("url1","url2")
    
    requests <- expand.grid(uid=datasets_uids, server=servers) |>
      transform(url=paste0(server,"dhis/api/dataSets/",uid,"/organisationUnits"))
    
    postOrgUnitsToDataset <- lapply(requests$url, function(url) {
      httr::POST(url,
         body=httr::upload_file("file.json"),
         httr::verbose(),
         httr::authenticate("username","password", type = "basic"),
         httr::content_type("application/json"),
         httr::progress("up"),
         httr::set_config(httr::config(ssl_verifypeer = 0L))
    )})
    

    然后所有数据将在postOrgUnitsToDataset[[1]]postOrgUnitsToDataset[[2]]等中。它的顺序与requests data.frame 中显示的记录顺序相同

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-27
      • 2013-12-07
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 2016-11-01
      • 2014-11-09
      • 1970-01-01
      相关资源
      最近更新 更多