重命名R

时间:2018-06-22 00:13:36

标签: r

我有几个文件(19x11x4),我需要按顺序重命名(1:19),并在所有文件上增加相同的字符串。

第一个文件以这种方式命名:

cc26bi701 
cc26bi702
cc26bi703

他们需要被称为: 生物1 生物2 bio3

我的失败尝试是

files <- list.files(list.files("./data/gs26bi70",  pattern = ".tif$", full.names = TRUE)
sapply( seq_along(files),function(x){
 file.rename(files[x], paste0("bio")))
})

此致

1 个答案:

答案 0 :(得分:1)

@thelatemail的评论正确。 paste0()至少需要2个字符串。

您还遇到一个问题,files中的文件名都以.tif结尾,并且您希望将此文件扩展名保留在末尾。

这使用您的基本思想,只是进行了一些简化。

myPath <- './/data//gs26bi70//'
fileList <- dir(path = myPath, pattern = '*.tif')  # list of file names, not including their paths

sapply(X = fileList, FUN = function(x) {
  file.rename(paste0(myPath, x),     # paste0() the path and old name
              paste0(myPath, 'bio', substring(x, first = 8))) })     # paste0() the path and new name

# substring('hello world', first = 8) returns 'orld'
# (starting at number 8, all following characters are returned)

file.rename()需要2个字符串:路径和旧文件名以及路径和新文件名。我们使用paste0(myPath, x)(其中x是我们当前重命名的文件的名称)提供路径和旧文件名。然后,我们提供相同的路径,但是将其与'bio'以及旧名称的后6个字符结合在一起。我们使用substring()函数来获取旧文件名的最后一个字符。因此,在您的问题中,您说其中一个文件名为cc26bi701.tif。由此,我们拉下01.tif并将其添加到bio的末尾以得到bio01.tif

注意:我使用旧文件名的后6个字符而不是使用seq_along()来顺序命名,因为我不确定R对其进行排序的顺序。例如,如果我们最后重命名了cc26bi701.tif文件,那么当它应重命名为bio19.tif时,其新名称将是bio01.tif。希望我对这个假设是正确的。