我正在调整另一个用户here编写的函数,其中可以批量裁剪一系列光栅文件。该函数最初是为.asc文件编写的,但是我打算将它用于.tif文件,这些文件是使用pyModis(python包;不是超级相关的)集体生成的。
目前,原始filenames
功能下的list.file()
为:
[1] "./FILE_mosaik_DOY.tif" "./FILE_mosaik_DOY.tif.xml"
[3] "./FILE_mosaik_EVI.tif" "./FILE_mosaik_EVI.tif.xml"
[5] "./FILE_mosaik_NDVI.tif" "./FILE_mosaik_NDVI.tif.xml"
[7] "./FILE_mosaik.tif" "./FILE_mosaik.tif.xml"
[9] "./FILE_mosaikb.tif" "./FILE_mosaikb.tif.xml"
[11] "./ReferenceRaster.tif"
我希望它是:
[1] "./FILE_mosaik_DOY.tif" "./FILE_mosaik_EVI.tif"
[3] "./FILE_mosaik_NDVI.tif" "./FILE_mosaik.tif"
[5] "./FILE_mosaikb.tif" "./ReferenceRaster.tif"
原始代码使用以下行来定义将在批处理中裁剪的文件:
filenames <- list.files(pattern="*.asc", full.names=TRUE) #Extract list of file names from working directory
但是因为我想使用tif文件,我使用下面的行。
filenames <- list.files(pattern="*.tif", full.names=T) #Extract list of file names from working directory
除了:我的工作目录中还有.xml文件,其中包含.tif扩展名。因此,filenames
包含"./FILE_mosaik_EVI.tif.xml"
等文件。我想只在filenames
中包含tif文件。
我试过两种方法删除.xml文件。首先,我尝试使用rm()
,但是因为filenames
是一个字符而不是一个列表(至少我认为这就是原因)事情没有成功,我最终得到了一个{ {1}} NULL
个对象。
filenames
我还尝试在原始参数
中指定我不想要.xml文件 filenames <- list.files(pattern="*.tif", full.names=T) #Extract list of file names from working directory
filenames <- rm(pattern="*.xml", list=filenames) #Remove the .xml files automatically produced in pyModis
但这也不起作用。遗憾的是,stackoverflow上的许多现有问题都处理 filenames <- list.files(pattern="*.tif" && !="*.txt", full.names=T) #Extract list of file names from working directory
无法找到足够的文件,而不是太多......
如何实现仅包含 .tif文件的list.files()
对象?
答案 0 :(得分:4)
您可以使用$
符号指定字符串的结尾:
filenames <- list.files(pattern="\\.tif$", full.names=T)