do.call возвращает одно значение из списка аргументов - ожидая несколько значений

У меня есть функция под названием «блок», которая использует пакет CURL для извлечения информации из веб-API. Функция принимает два аргумента («latty» и «longy»), и я хотел бы использовать do.call для передачи списка значений аргументов.

Однако кажется, что он передает только первую пару значений и не переходит к следующей паре.

Вот мой код:

block <- function(latty, longy){
   Sys.sleep(0.25)
   url <- paste0("https://geo.fcc.gov/api/census/block/find?latitude=", 
          latty, "&longitude=", longy)
   response <- curl(url)
   data <- readLines(response, warn=FALSE)
   blockID <- substr(sub(".*Block FIPS=\\\"","",data), 0, 15)
   return(blockID)
   }

result <- do.call(block, list(latty=latlngVA$LATITUDE, longy=latlngVA$LONGITUDE))

Спасибо!


person Phoebe    schedule 13.08.2018    source источник
comment
вы можете спутать do.call с Map   -  person Moody_Mudskipper    schedule 13.08.2018
comment
Map(block,latty=latlngVA$LATITUDE, longy=latlngVA$LONGITUDE) или mapply(block,latty=latlngVA$LATITUDE, longy=latlngVA$LONGITUDE) даст вам то, что вы хотите?   -  person Moody_Mudskipper    schedule 13.08.2018
comment
Да! Большое спасибо, это очень полезно.   -  person Phoebe    schedule 13.08.2018


Ответы (1)


Похоже, вы путаете do.call с Map. do.call используется для предоставления функции ее аргументов, хранящихся в списке. Map используется для вызова функции несколько раз в списках аргументов, поэлементно параллельно.

Вот что должно сработать для вас:

Map(block,latty=latlngVA$LATITUDE, longy=latlngVA$LONGITUDE)
person Moody_Mudskipper    schedule 13.08.2018