1

我有一个包含 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 的文件。

提前致谢!

金佰利

4

2 回答 2

1

我认为您正在寻找的是sprintf()函数...
sprintf将使您免于对 n 进行测试,从而知道需要多少个前导零。
结合paste()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"
> 
于 2012-11-07T16:57:54.880 回答
0

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

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.....

}

paste0sep=""如果您不需要分隔符(如您的情况),只会使您免于写作

于 2012-11-07T16:50:11.743 回答