file.show和循环中的用户输入

时间:2014-08-04 15:23:43

标签: r loops plot tiff

我有一个数据框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更容易。但是现在我在这个循环中遇到了困难......

1 个答案:

答案 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
}