chr <- read.table("../lrn/cty_chr.txt",
         header=F,colClasses="character",col.names=c("file","feature","type")) 
num <- read.table("../lrn/cty_num.txt",
         header=F,colClasses="character",col.names=c("file","feature","type")) 

target.lrn <- read.table("../lrn/num/472.dat",header=T,colClasses="numeric")
target.val <- read.table("../val/num/472.dat",header=T,colClasses="numeric")

nchr <- length(chr$file)
nnum <- length(num$file)

for (i in 1:nchr) {
  file.lrn <- paste("../lrn/chr/",chr$file[i],".dat",sep="")
  file.val <- paste("../val/chr/",chr$file[i],".dat",sep="")

  print("---------------------------------------------------------------------")
  print(c(chr$feature[i],file.lrn))

  lrn <- read.table(file.lrn,header=T,colClasses="character",blank.lines.skip=F)
  val <- read.table(file.val,header=T,colClasses="character",blank.lines.skip=F)

  y.lrn <- target.lrn[,1]
  y.val <- target.val[,1]

  x.lrn <- lrn[,1]
  x.val <- val[,1]

  y.lrn <- y.lrn[x.lrn!=""]
  y.val <- y.val[x.val!=""]

  x.lrn <- x.lrn[x.lrn!=""]
  x.val <- x.val[x.val!=""]

  x.lrn <- as.factor(x.lrn)
  x.val <- as.factor(x.val)

  nl <- nlevels(x.lrn)
  print(paste("nlevels = ",nl))

  if (nl == 1) {
    print("too few levels")
  }
  else if (nl < 25) {
    dat <- data.frame(y=y.lrn,x=x.lrn)
    rm(lrn,x.lrn,y.lrn)
    fit <- lm(y~x,dat)
    print(anova(fit))
    b <- fit$coefficient
    e <- y.val - x.val*b    
    print(var(e))
  }
  else if (nl < 100) {
    set.seed(100543)
    idx <- sample(1:length(x.lrn),15000)
    dat <- data.frame(y=y.lrn[idx],x=x.lrn[idx])
    rm(lrn,x.lrn,y.lrn,idx)
    fit <- lm(y~x,dat)
    print(anova(fit))
    b <- fit$coefficient
    e <- y.val - x.val*b    
    print(var(e))
  } 
  else {
    print("too many levels")
  }

  print("---------------------------------------------------------------------")
  print(c(chr$feature[i],file.lrn))

  lrn <- read.table(file.lrn,header=T,colClasses="character",blank.lines.skip=F)
  val <- read.table(file.val,header=T,colClasses="character",blank.lines.skip=F)

  y.lrn <- target.lrn[,1]
  y.val <- target.val[,1]

  x.lrn <- lrn[,1]
  x.val <- val[,1]

  x.lrn <- as.factor(x.lrn)
  x.val <- as.factor(x.val)

  nl <- nlevels(x.lrn)
  print(paste("nlevels = ",nl))

  if (nl == 1) {
    print("too few levels")
  }
  else if (nl < 25) {
    dat <- data.frame(y=y.lrn,x=x.lrn)
    rm(lrn,x.lrn,y.lrn)
    fit <- lm(y~x,dat)
    print(anova(fit))
    b <- fit$coefficient
    e <- y.val - x.val*b    
    print(var(e))
  }
  else if (nl < 100) {
    set.seed(100543)
    idx <- sample(1:length(x.lrn),15000)
    dat <- data.frame(y=y.lrn[idx],x=x.lrn[idx])
    rm(lrn,x.lrn,y.lrn,idx)
    fit <- lm(y~x,dat)
    print(anova(fit))
    b <- fit$coefficient
    e <- y.val - x.val*b    
    print(var(e))
  } 
  else {
    print("too many levels")
  }
}

for (i in 1:nnum) {
  file.lrn <- paste("../lrn/num/",num$file[i],".dat",sep="")
  file.val <- paste("../val/num/",num$file[i],".dat",sep="")

  print("---------------------------------------------------------------------")
  print(c(num$feature[i],file.lrn))

  lrn <- read.table(file.lrn,header=T,colClasses="numeric",blank.lines.skip=F)
  val <- read.table(file.val,header=T,colClasses="numeric",blank.lines.skip=F)

  y.lrn <- target.lrn[,1]
  y.val <- target.val[,1]

  x.lrn <- lrn[,1]
  x.val <- val[,1]

  y.lrn <- y.lrn[x.lrn!=""]
  y.val <- y.val[x.val!=""]

  x.lrn <- x.lrn[x.lrn!=""]
  x.val <- x.val[x.val!=""]

  dat <- data.frame(y=y.lrn,x=x.lrn)
  rm(lrn,x.lrn,y.lrn)
  fit <- lm(y~x,dat)
  print(anova(fit))
  e <- y.val - x.val*b
  print(var(e))
}
