R新手编写按年份拼接URL读取CSV函数报错处理求助
R代码报错修复及实现方案
报错解决
你遇到的报错有两个触发点:
- 报错提示
+运算符无法处理非数值参数,说明你实际运行的代码中误使用+拼接字符串,R不支持用+拼接字符对象,需使用paste/paste0函数完成拼接 - 你提供的代码中
sep = “”使用了中文全角双引号,R无法识别该符号,需替换为半角双引号""
修复后的基础实现代码如下:
my_func <- function(year) { # paste0等价于sep=""的paste,直接拼接多个字符串 url <- paste0("https://www.nbp.pl/kursy/Archiwum/archiwum_tab_a_", year, ".csv") d <- read.table(url, header = TRUE, sep = ";", fill = TRUE, encoding = "UTF-8") return(d) } print(my_func(2018))
正则实现思路(无需第三方包)
如果要求使用正则逻辑实现,可通过R基础函数sub()做占位符替换,完全符合无第三方包的要求,实现代码如下:
my_func <- function(year) { # 定义带{year}占位符的URL模板 url_temp <- "https://www.nbp.pl/kursy/Archiwum/archiwum_tab_a_{year}.csv" # 正则匹配占位符并替换为传入的年份 url <- sub("\\{year\\}", as.character(year), url_temp) d <- read.table(url, header = TRUE, sep = ";", fill = TRUE, encoding = "UTF-8") return(d) }
注:正则中
{}属于特殊字符,需要加双反斜杠转义才能被识别为普通符号匹配。
内容的提问来源于stack exchange,提问作者Aella
相关产品推荐
相关产品推荐

