我有几个文件(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")))
})
此致
答案 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
。希望我对这个假设是正确的。