【问题标题】:Use string to search folder and import file in R使用字符串在R中搜索文件夹并导入文件
【发布时间】:2021-10-18 18:50:45
【问题描述】:

我正在尝试搜索文件夹并根据字符值导入多层栅格。

如何导入与字符串匹配的文件并保留其名称?

#use shp and y to find orthos
ortho <- crop(MrSID_shp, y)
s <- ortho[[2]] 
s
#"3_5" "2_5"

#use s values to search folder with corresponding name
file.is <- Sys.glob("*.tif")
print(file.is) # "0_0.tif" "2_5.tif" "3_5.tif"

for (i in seq_along(file.is)){
file.is[[i]] <- stack(file = file.is[i],
                      pattern = s,)
}
#this results in empty values 

我尝试了 grep、find 和 lapply,但都没有成功。我已经能够使用“s”模式导入“3_5.tif”,但我需要导入所有匹配的文件,而不仅仅是一个。

谢谢

【问题讨论】:

    标签: r regex find glob


    【解决方案1】:

    以下适用于您的示例(我手动创建了file.is,您希望在其中使用Sys.glob("*.tif")):

    s <- c("2_5", "3_5")
    file.is <- c("0_0.tif", "2_5.tif", "3_5.tif")
    
    unique(sapply(s, grep, file.is, value = TRUE))
    

    【讨论】:

    • 谢谢你,迈克,成功了!您能否就导入这些具有不同范围的文件的最佳方式提出建议?不确定这是否需要一个新的 Question.toimport &lt;- unique(sapply(s, grep, file.is, value = TRUE)) | stack(toimport) 不起作用。谢谢!
    • 很高兴它成功了!当您说“范围”时,您是指地理范围(即,为不同的数据集获取s)? (PS如果答案有效,您介意接受答案吗?)
    • 接受 - 谢谢!不是s。当我去阅读stack(toimport) #Error in compareRaster(rasters) : different extent。我不知道在这里做什么,我已经阅读了掩码、分解和重新采样以更改toimport 中列出的文件的范围,但我不确定哪个最好使用。我希望我不需要改变范围。导入这些 tif 后,我将使用 shapefile 裁剪它们。有什么路线可以推荐吗?谢谢
    • 我试过resample(toimport) # Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘resample’ for signature ‘"character", "missing"’。我假设因为toimport 是一个字符向量,我不能使用它来选择要导入的文件。感谢您的所有帮助!
    • @Jade,这是有道理的。我认为值得发布一个不同的问题。不过,它帮助我从功能的角度进行思考。如果您可以编写一个对单个实体执行所需操作的函数,那么您始终可以使用apply 系列遍历它们。
    猜你喜欢
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多