如何用lapply或purrr::map批量调用tidygeocoder的reverse_geo()函数
错误原因
你调用reverse_geo()时未对非前两位参数显式命名,导致参数位置匹配错误。reverse_geo()的第三个参数是limit,你直接传入的"osm"被识别为limit的取值,不符合数值要求,因此触发报错。
此外不建议用list作为变量名,这是R内置基础函数名,容易引发后续冲突,建议替换为df_list这类自定义名称。
修正方案
方法1:使用base R的lapply
df1 <- data.frame(random_lats,random_longs) df2 <- data.frame(random_lats,random_longs) df_list <- list(df1, df2) data_frame_list = lapply(df_list, function(x) { reverse_geo( lat = x[["random_lats"]], long = x[["random_longs"]], method = "osm", full_results = TRUE, custom_query = list(extratags = 1, addressdetails = 1, namedetails = 1) ) })
方法2:使用purrr::map
如果需要将所有返回结果直接合并为单个数据框,可以用map_dfr替代map:
library(purrr) # 输出为列表,每个元素对应一个输入数据框的逆地理编码结果 data_frame_list <- map(df_list, ~reverse_geo( lat = .x[["random_lats"]], long = .x[["random_longs"]], method = "osm", full_results = TRUE, custom_query = list(extratags = 1, addressdetails = 1, namedetails = 1) )) # 输出为合并后的单个数据框 merged_df <- map_dfr(df_list, ~reverse_geo( lat = .x[["random_lats"]], long = .x[["random_longs"]], method = "osm", full_results = TRUE, custom_query = list(extratags = 1, addressdetails = 1, namedetails = 1) ))
内容的提问来源于stack exchange,提问作者user5831311
相关产品推荐
相关产品推荐

