【问题标题】:R Code to Add a Special Header When Exporting a Matrix to a Text File将矩阵导出到文本文件时添加特殊标题的 R 代码
【发布时间】:2021-08-20 22:56:37
【问题描述】:

我的代码是从一个大列创建一个 141 x 131 矩阵并将其导出为文本文件。到目前为止,它运作良好。我将使用 ASCII 转栅格工具将这些文件导入 ArcGIS。为了让 ArcGIS 导入它们,需要一个五行标题,标题后面的数据如下:

NCOLS 131
NROWS 141
XLLCENTER -150
YLLCENTER -70
CELLSIZE 1
NODATA_VALUE -32768
265 41.7 1.8 12 16 18.3 16.5 18.3 19.7 24.5 26.1 28.4...

一旦 R 保存文本文件,手动粘贴此标头是微不足道的,但我需要处理 900 多个文件,因此我希望 R 在导出文本文件时添加标头。这可能吗,还是我可以将标题行添加为矩阵的前 5 行,然后将其导出?

编辑:下面这部分是关于我在 cmets 中提出的另一个问题。

这是我的全部代码:

batch_tpose <- function(filename) {
dat <- matrix(scan(file = filename),ncol=3,byrow=T)
dat_trans <- matrix(dat[,3], 141, byrow=FALSE)

header <- "NCOLS 131
NROWS 141
XLLCENTER -150
YLLCENTER -70
CELLSIZE 1
NODATA_VALUE -32768"

writeLines(header, filename)
write.table(dat_trans, file = filename, row.names=FALSE, col.names=FALSE, append=TRUE)

## This works, I just need the output to be something like out/filename...


}

batch_tpose("200RelVort-nwatl-20201008-15.txt")

我希望能够使用list.files 在底部的batch_tpose 命令中处理一堆文件。现在我只是用一个文件进行测试。这有效,但它将文件写入工作目录。它还会覆盖源文件,因为它位于同一目录中。如何将输出文件写入“out”目录?我试过out/filenamefile = out/filename 但这会创建一个名为“文件名”的新文件。我尝试了其他组合,但它们导致了错误。

【问题讨论】:

    标签: r arcgis export-to-text


    【解决方案1】:

    您可以先用readLines 写入标题,然后用write.table(或类似函数)写入数据。诀窍就是选项append = TRUE。举个例子:

    header <- "NCOLS 131
    NROWS 141
    XLLCENTER -150
    YLLCENTER -70
    CELLSIZE 1
    NODATA_VALUE -32768"
    
    data <- matrix(rnorm(100), ncol=10)
    
    writeLines(header, "file.txt")
    write.table(data, file="file.txt", col.names=FALSE, row.names=FALSE, append=TRUE)
    

    你也可以paste标题文本和常用的R函数一起使用:

    ncols=131
    nrows=141
    
    header <- paste0("NCOLS ", ncols, 
    "\nNROWS ", nrows,
    "\nXLLCENTER -150
    YLLCENTER -70
    CELLSIZE 1
    NODATA_VALUE -32768")
    

    可以将换行符指定为文本字符串中的换行符,也可以使用换行符“\n”代码。

    【讨论】:

    • 谢谢!我会试试看。
    • 是的,它应该可以工作,只要标题值保持不变。
    • 谢天谢地,这不需要改变。我现在拥有一个函数中的所有代码(使用函数(文件名)),所以我可以处理多个文件。最后几行的文件名语法有问题。如何更改“file.txt”和 file="file.txt" 以便它使用原始文件名写入名为“out”的文件夹中?我尝试了 out/filename 和 file=out/filename 以及各种组合,但我无法让它工作。
    • "out/file.txt" 应该可以工作,因为它在引号中(在你的 vomment 中丢失),R 已经在正确的工作文件夹中(其中 out 是相对的)并且一个普通的斜线 @987654328使用 @ 而不是一个反斜杠。
    • 是的“out/file.txt”工作正常。我现在在一个函数中有这个,我使用“文件名”作为函数运行的一个或多个文件。如何更改通过函数中的文件名调用获取实际文件名的输出语句。例如,如果我想将 file = filename 保存在工作文件夹中,它会起作用,但 file = out/filename 不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多