微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将矩阵导出到文本文件时添加特殊标题的 R 代码

如何解决将矩阵导出到文本文件时添加特殊标题的 R 代码

我有代码一个大列创建一个 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 行然后导出?

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

这是我的全部代码

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")

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

解决方法

您可以先用 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”代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。