在R中连接多个字符串

时间:2017-10-03 14:24:11

标签: r replace concatenation

我想连接下面的网址,我写了一个下面的函数来连接所有网址:

library(datetime)
library(lubridate)

get_thredds_url<- function(mon, hr){
  a <-"http://abc.co.in/"
  b <-"thredds/path/"
  c <-paste0("%02d", ymd_h(mon))
  d <-paste0(strftime(datetime_group, format="%Y%m%d%H"))
  e <-paste0("/gfs.t%sz.pgrb2.0p25.f%03d",(c, hr))
  url <-paste0(a,b,b,d)
  return (url)
}

mon = datetime(2017, 9, 26, 0)
hr = 240

url = get_thredds_url(mon,hr)
print (url)

但是当我执行get_thredds_url()

的定义时,我遇到了以下错误
  

错误:意外&#39;,&#39;在:         &#34; d&lt; -paste0(strftime(datetime_group,format =&#34;%Y%m%d%H&#34;))       e控制-paste0(&#34; /gfs.t%sz.pgrb2.0p25.f%03d",(C,&#34;       url&lt; -paste0(a,b,b,d)

     

paste0(a,b,b,d)中的错误:object&#39; a&#39;未找到     返回(网址)       错误:没有返回的功能,跳到顶层   }       错误:意外&#39;}&#39;在&#34;}&#34;

我的功能有什么问题,我该如何解决?

最终输出应为:

http://abc.co.in/thredds/path/2017092600/gfs.t00z.pgrb2.0p25.f240

2 个答案:

答案 0 :(得分:1)

弄清楚它是什么有点麻烦,你正试图这样做。您的代码中似乎存在相当多的矛盾,特别是与您想要的最终输出相比。因此,我决定专注于您想要的输出和您在变量中提供的输入。

get_thredds_url <- function(yr, mnth, day, hrs1, hrs2){
  part1 <- "http://abc.co.in/"
  part2 <- "thredds/path/"

  ymdh  <- c(yr, formatC(c(mnth, day, hrs1), width=2, flag="0"))
  part3 <- paste0(ymdh, collapse="")

  pre4  <- formatC(hrs1, width=2, flag="0")
  part4 <- paste0("/gfs.t", pre4, "z.pgrb2.0p25.f", hrs2)
  return(paste0(part1, part2, part3, part4))
}

get_thredds_url(2017, 9, 26, 0, 240)
# [1] "http://abc.co.in/thredds/path/2017092600/gfs.t00z.pgrb2.0p25.f240"

关键是正确使用paste0(),我认为formatC()可能对某些人(包括我)来说是新的。

此处使用

formatC()在您提供的数字前面填充零,从而确保9转换为09,而12仍为12 1}}。

请注意,此答案位于R基础,不需要额外的包。

另请注意,您不应将urlc用作变量名称。这些名称已保留给R中的其他功能。通过将它们用作变量名称,您将覆盖它们的实际目的,这可能(将)在某些时候导致问题

答案 1 :(得分:0)

使用sprintf可以更好地控制插入字符串

的值
library(lubridate)
get_thredds_url<- function(mon, hr){
  sprintf("http://abc.co.in/thredds/path/%s/gfs.t%02dz.pgrb2.0p25.f%03d",
          strftime(mon, format = "%Y%m%d%H", tz = "UTC"),
          hour(mon),
          hr)
}

mon <- make_datetime(2017, 9, 26, 0, tz = "UTC")
hr <- 240

get_thredds_url(mon, hr)
[1] "http://abc.co.in/thredds/path/2017092600/gfs.t00z.pgrb2.0p25.f240"