String R编码字符串

String R编码字符串,string,r,parsing,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_$T

我有一个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.....

}
for(N英寸(1:96)){
如果(N>10)

TrackID尝试使用
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.....

}
for(N英寸(1:96)){
如果(N>10)

TrackID尝试使用
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.....

}
for(N英寸(1:96)){
如果(N>10)

TrackID我认为您需要的是函数…
sprintf
将使您不必对n进行测试,从而知道需要多少前导零。
与该函数相结合,生成所需的文件名成为一行。
实际上,只需单独使用sprintf()函数是可能的,如
sprintf(“交叉点、轨道、校准的jma、1951年的jma、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(1) [1] “交叉口\轨道\校准\ jma \自1951年\ u 0001.csv” >GetFileName(13) [1] “交叉口\u轨道\u校准\u jma\u自1951年\u 0013.csv” >GetFileName(321) [1] “交叉口\轨道\校准\ jma \从1951 \ u 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"
> 
GetFileName GetFileName(12,“输出/跟踪\交叉\区域\多边形”“txt”)
[1] “输出/跟踪\u交叉\u区域\u多边形\u 0012.txt”
>GetFileName(12,“输出/轨迹\交叉\区域\多边形”)
[1] “输出/跟踪\u交叉\u区域\u多边形\u 0012.csv”
> 

我认为您需要的是函数…
sprintf
将使您不必对n进行测试,从而知道需要多少前导零。
与该函数相结合,生成所需的文件名成为一行。
实际上,只需单独使用sprintf()函数是可能的,如
sprintf(“交叉点、轨道、校准的jma、1951年的jma、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(1) [1] “交叉口\轨道\校准\ jma \自1951年\ u 0001.csv” >GetFileName(13) [1] “交叉口\u轨道\u校准\u jma\u自1951年\u 0013.csv” >GetFileName(321) [1] “交叉口\轨道\校准\ jma \从1951 \ u 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"
> 
GetFileName GetFileName(12,“输出/跟踪\交叉\区域\多边形”“txt”)
[1] “输出/跟踪\u交叉\u区域\u多边形\u 0012.txt”
>GetFileName(12,“输出/轨迹\交叉\区域\多边形”)
[1] “输出/跟踪\u交叉\u区域\u多边形\u 0012.csv”
> 

Hmmm我在使用paste0函数时遇到问题。我需要一个特殊的库来使用它吗?@user1716877否,但您确实需要一个最新的R。将
paste0(foo)
更改为
粘贴(foo,sep=“”)
对于旧R的类似结果,它是pasteZERO而不是pasteOH。您使用的是什么版本的R?我想这已经使用了一年了,至少……嗯,我在paste0函数方面遇到了问题。我需要一个特殊的库来使用它吗?@user1716877不,但您确实需要一个最新的R。将
paste0(foo)
更改为
paste(foo,sep=“”)
对于较旧R的类似结果,它是pasteZERO而不是pasteOH。您使用的是什么版本的R?我想这已经有一年了,至少。。。