使用Reduce和paste拼接字符串时如何去除多余字符?
解决URL拼接时多余
&的问题 你当前用Reduce和paste0拼接URL时,因基础URL末尾带?,导致和第一个参数之间多出一个&,可以用以下几种方法解决:
方法1:先拼接参数再组合基础URL
先把参数用&连接成完整的参数字符串,再和基础URL直接拼接:
base_url <- "http://www.ncdc.noaa.gov/homr/services/station/search?" args <- c("state=CA", "headersOnly=true") # 将参数用&连接 args_str <- paste(args, collapse = "&") # 拼接最终URL combined_url <- paste0(base_url, args_str) > combined_url [1] "http://www.ncdc.noaa.gov/homr/services/station/search?state=CA&headersOnly=true"
方法2:调整Reduce的拼接逻辑
如果一定要用Reduce,可以去掉基础URL末尾的?,在拼接第一个参数时添加?,后续参数添加&:
base_url <- "http://www.ncdc.noaa.gov/homr/services/station/search" args <- c("state=CA", "headersOnly=true") combined_url <- Reduce(function(x, y) { if (x == base_url) { paste0(x, "?", y) } else { paste0(x, "&", y) } }, x=args, init=base_url) > combined_url [1] "http://www.ncdc.noaa.gov/homr/services/station/search?state=CA&headersOnly=true"
方法3:用专业URL处理函数(推荐)
R中有专门处理URL的工具包,比如httr的modify_url,能更规范地生成URL,避免手动拼接的错误:
library(httr) base_url <- "http://www.ncdc.noaa.gov/homr/services/station/search" args <- list(state = "CA", headersOnly = TRUE) combined_url <- modify_url(base_url, query = args) > combined_url [1] "http://www.ncdc.noaa.gov/homr/services/station/search?state=CA&headersOnly=true"
内容的提问来源于stack exchange,提问作者nightstand
相关产品推荐
相关产品推荐

