我有一个数据框data
,其中包含有关tiff的信息,包括描述tiff内容的一列txt
。不幸的是,txt
并不总是正确的,我们需要手动纠正它们。因此,我想循环遍历数据中的每一行,显示tiff并请求反馈,而不是放入data$txt.cor
。
setwd(file.choose())
一些测试tiff(内部使用nonsene,但显示想法......):
txt <- sample(100:199, 5)
for (i in 1:length(txt)){
tiff(paste0(i, ".tif"))
plot(txt[i], ylim = c(100, 200))
dev.off()
}
和dataframe:
pix.files <- list.files(getwd(), pattern = "*.tif", full.names = TRUE)
pix.file.info <- file.info(pix.files)
data <- cbind(txt, pix.file.info)
data$file <- row.names(pix.file.info)
data$txt.cor <- ""
data$txt[5] <- 200 # wrong one
我的反馈功能(错误处理剥离):
read.number <- function(){
n <- readline(prompt = "Enter the value: ")
n <- as.character(n) #Yes, character. Sometimes we have alphanumerical data or leading zeros
}
现在循环,非常感谢帮助:
for (i in nrow(data)){
file.show(data[i, "file"]) # show the image file
data[i, "txt.cor"] <- read.number() # aks for the feedback and put it back into the dataframe
}
在我的第一次尝试中,我正在考虑plot.lm的想法,在按下返回后您将通过诊断图。我怀疑情节和tiff不是大朋友。事实证明file.show
更容易。但是现在我在这个循环中遇到了困难......
答案 0 :(得分:1)
您的问题是您没有循环数据,您只评估最后一行。只需编写1:nrow(data)
即可迭代所有行。
要在R中显示您的tiff图像,您可以使用包rtiff
:
library(rtiff)
for (i in 1:nrow(data)){
tif <- readTiff(data[i,"file"]) # read in the tiff data
plot(tif) # plot the image
data[i, "txt.cor"] <- read.number() # aks for the feedback and put it back into the dataframe
}