【问题标题】:For Loop in R for reading and exporting tiff fileR中的for循环用于读取和导出tiff文件
【发布时间】:2023-04-03 06:39:02
【问题描述】:

我有多个 CSV 作为输入,它们基本上具有经纬度信息,我正在导出 .tiff 图像,这些图像在地图上绘制了这些经度经度。我想知道如何循环这个过程,以便我可以读取多个 CSV,从而生成与这些 CSV 对应的多个地图(.tiff)。任何帮助将不胜感激!

这是我目前使用的代码

rm(list=ls())


sclusters_1 <- readLines("C:\\Users\\D85_H.csv")
skip_second <- sclusters_1[-2]
sclusters   <- read.csv(textConnection(skip_second), header = TRUE) 



library(grDevices)
library(PBSmapping)
library(maptools)
library(sp)

myShapeFile<-importShapefile("C:\\Users\\st99_d00_shp\\st99_d00",readDBF=TRUE, projection = "LL")
ConvUS <- convUL(myShapeFile)


addressEvents<-as.PolyData(sclusters,projection="LL", zone = 15)    
uaddressEvents <- convUL(addressEvents)
sclusters_cl <- unique(sclusters$PID)
len <- length(sclusters_cl)



palette(c("dodgerblue3","red3","olivedrab","purple4","turquoise2","orange3","lightskyblue4","mediumorchid3","saddlebrown","skyblue4"))

setwd("C:/Users/")
name, leave .tiff extension
tiff(filename = "Test.tiff",
          width = 3750, height = 3142, units = "px", pointsize = 12,
         compression = "lzw",
          bg = "transparent")



plotMap(ConvUS ,  xlim=c(-8000,3500), ylim=c(2000,9500), plt=c(0.07,0.97,0.07,0.98), bg = "white", border = "darkgrey", axes=FALSE, xlab=" ",ylab=" ", lty = 1, lwd = 2)

addPoints(uaddressEvents,col=1:len,cex=2.5, pch = "O") 


legend("topright",legend = sclusters_cl, cex=0.7, fill=palette())

#close output file stream
dev.off()

【问题讨论】:

    标签: r loops csv tiff


    【解决方案1】:

    请注意,这是未经测试的:

    由于导入和导出文件名都是作为长度为 1 的字符向量传递的,因此您可以制作像 m &lt;- matrix(c("infile1.csv", "outfile1.tiff", "infile2.csv", "outfile2.tiff"),nrow=2) 这样的矩阵。

    然后您可以将整个内容包装在该矩阵列上的 for 循环中,例如for(j in 1:ncol(m))。然后只需将"C:\\Users\\st99_d00_shp\\st99_d00" 替换为m[1,j] 并将"Test.tiff" 替换为m[2,j]

    更好的做法可能是将整个事物包装在一个函数中,然后编写一个单独的循环来调用该函数。例如:

    myTIFF <- function (infile, outfile) {
      # stuff you want to do to each pair of input and output files
    }
    
    m <- matrix(c(
                  "infile1.csv", "outfile1.tiff",
                  "infile2.csv", "outfile2.tiff"
                  # and so on
                 ), nrow = 2)
    
    for(j in 1:ncol(m)) myTIFF(m[1, j], m[2, j])
    

    还请注意,R 具有名为dir 的函数,它可以自动将目录的内容提取为字符向量,就像ls 对当前环境中的变量所做的那样。如果您有大量 CSV 文件,您可以使用它(可能与 grep 结合使用)以编程方式生成矩阵 m,而不是手动输入。

    【讨论】:

    • 嘿,谢谢,这真的很有帮助!
    • 我刚刚想到的另一种选择是使用mapply:mapply(myTIFF, m[, 1], m[, 2])。根据具体情况,这可能或多或少有意义。
    猜你喜欢
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多