我有5个具有相同尺寸的二进制文件(栅格):前四个文件代表参数1,第五个文件代表10个类的土地覆盖图。我想根据土地计算所有四个文件的平均值封面课程。所以最后我们将得到4个值对应每个类。
我为所有文件尝试了这个:
dir1<- list.files("C:\filesh", "*.img", full.names = TRUE)
fre <- file("C:\\landover_from Suj1440a.bin","rb")
sdf<- readBin(fre, integer(), size=1, n=1440*720, signed=F)
results<- list()
for (.files in seq_along(dir1)){
list1 <- readBin(dir1[.files], numeric(), size = 4, n = 1440*720, signed = TRUE)
list1=tapply(list1, sdf, mean, na.rm=TRUE)
results[[length(results) + 1L]]<- list1}
它似乎没有错误: 写下结果:
for (i in seq_along(results)){
write.table(results[[i]], paste("C:\\Users\\filesh\\data", ".txt", sep=""),append=TRUE)}
我将获得一个包含所有结果的文本文件,如......
x
1 0.2
2 0.5
3 0.2
x
1 0.1
2 0.5
3 0.6
4 - 我希望输出为一个文本文件,其结果如下:
1 2 3 4 5 6 7 ...
x 0.2 0.5 0.2 . . . . ...
x 0.1 0.5 0.6
x . . . . . . . ...
x .
从我的搜索中我发现我需要将它们写成数据帧以获得我正在寻找的东西。任何帮助。
答案 0 :(得分:3)
所以结果似乎是一个清单...... 为什么不进行一些格式化/清理并进行一次write.table调用?
以下是一个示例,但由于您没有提供可重现的示例,因此可能会失败。
# create data
df <- read.table(header = TRUE, text = "'x'
'0' 0.16
'2' 0.15
'3' 0.16
'4' 0.10
'5' 0.18
'6' 0.02
'7' 0.11
'8' 0.06
'9' 0.07
'10' 0.17
'11' 0.06
'12' 0.07")
# make list
df_list <- list(df, df)
# merge columns
out <- do.call(cbind, df_list)
names(out) <- paste0('x', 1:ncol(out))
# transpose
out_t <- t(out)
write.table(out_t, 'data.txt')
答案 1 :(得分:2)
根据您之前因某些原因删除的问题,您可以使用rbind
:
> r= c(5,4,5,4,2,5)
> s= c(5,4,5,4,2,5)
> rbind(r, s)
[,1] [,2] [,3] [,4] [,5] [,6]
r 5 4 5 4 2 5
s 5 4 5 4 2 5
> write.table(rbind(r, s), file = "myfile.txt")
假设r
和s
位于名为“results”的列表中,这个问题似乎就是这样:
> results <- list(r = r, s = s)
> results
$r
[1] 5 4 5 4 2 5
$s
[1] 5 4 5 4 2 5
> write.table(do.call(rbind, results), file = "myfile.txt")