R编码字符串

时间:2012-11-07 16:41:29

标签: string r parsing

我有一个96个文件的列表,我想打开它并对数据执行一些功能。我对R很新,并且不确定如何操作字符串来打开顺序文件名。以下是我的代码,显然不起作用:

for (N in (1:96)){
  if (N > 10) 
      TrackID <- "000$N"
  }
  else{
      TrackID <- "00$N"
  }

  fname_in <- 'input/intersections_track_calibrated_jma_from1951_$TrackID.csv'
  fname_out <- 'output/tracks_crossing_regional_polygon_$TrackID.csv'

  ......data manipulations.....

}

所以基本上我只需要能够,例如,当N = 1时,引用一个名为intersections_track_calibrated_jma_from1951_0001.csv的文件。

提前致谢!

金佰利

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是sprintf()功能......
sprintf将使你免于对n进行测试,知道需要多少前导零 结合paste() or paste0功能,生成所需的文件名成为一行 实际上,可能只是单独使用sprintf()函数,如在 sprintf("intersections_track_calibrated_jma_from1951_%04d.csv", n)但具有生成文件名和/或“TrakID”的功能可能允许隐藏所有这些文件命名约定细节。

下面,在创建的便利函数的上下文中,查看sprintf()和paste0()的操作,以生成给定数字n的文件名。

> GetFileName <- function(n) 
    paste0("intersections_track_calibrated_jma_from1951_",
           sprintf("%04d", n),
           ".csv")

> GetFileName(1)
[1] "intersections_track_calibrated_jma_from1951_0001.csv"
> GetFileName(13)
[1] "intersections_track_calibrated_jma_from1951_0013.csv"
> GetFileName(321)
[1] "intersections_track_calibrated_jma_from1951_0321.csv"
> 

当然,您可以通过添加参数使GetFileName函数更加通用,其中一些参数具有默认值。以这种方式,它可以用于输入和输出文件名(或任何其他文件前缀/扩展名)。例如:

GetFileName <- function(n, prefix=NA, ext="csv") {
   if (is.na(prefix)) {
      prefix <- "intersections_track_calibrated_jma_from1951_"
   }

   paste0(prefix, sprintf("%04d", n), ".", ext)
}
> GetFileName(12)
[1] "intersections_track_calibrated_jma_from1951_0012.csv"
> GetFileName(12, "output/tracks_crossing_regional_polygon_", "txt")
[1] "output/tracks_crossing_regional_polygon_0012.txt"
> GetFileName(12, "output/tracks_crossing_regional_polygon_")
[1] "output/tracks_crossing_regional_polygon_0012.csv"
> 

答案 1 :(得分:0)

尝试使用pastepaste0来生成这样的字符串。

for (N in (1:96)){
  if (N > 10) 
      TrackID <- paste0("000",N)
  }
  else{
      TrackID <- paste0("00",N)
  }

  fname_in <- paste0('input/intersections_track_calibrated_jma_from1951_', 
                     TrackID.'.csv')
  fname_out <- paste0('output/tracks_crossing_regional_polygon_',
                      TrackID,'.csv')

  ......data manipulations.....

}
如果您不需要分隔符(如您的情况),

paste0只会让您免于撰写sep=""