我认为您正在寻找的是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"
>