我有一个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的文件。
提前致谢!
金佰利
答案 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)
尝试使用paste
和paste0
来生成这样的字符串。
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=""