缺少读取文件函数中需要TRUE / FALSE的值

时间:2014-05-25 10:19:40

标签: r average

有人可以帮我解决这个问题吗?我收到此错误:Error in if (numList[i]%%2 != 0) { : missing value where TRUE/FALSE needed。我知道这意味着我的一些数据是NA,但我不知道如何解决这个问题。

我尝试做的是读取三个文件,计算所有奇数的平均值,并将这些值保存到' average.txt'文件。

我的代码: 计算平均值的函数:

calcAvg <- function(numList) {
  oddList <- c()
  for (i in 1:length(numList)) {
    if(numList[i] %% 2 != 0) {
      oddList = c(oddList, numList[i])
    }
  }
  avg <- mean(oddList)
  return(format(round(avg,2 ), nsmall =2))
}

发生错误的函数:

writeToFile <- function() {
  file.create("average.txt", showWarnings = TRUE)
  myFile <- file("average.txt", open="w")
  f = file.path(getwd(), c("data1.txt", "data2.txt", "data3.txt"))
  d <- lapply(f, readFile)
  str(d)
  allNumAvg = calcAvg(as.numeric(unlist(d))) < --- error points on this line after traceback
  data1 = calcAvg(as.numeric(unlist(readFile("data1.txt"))))
  data2 = calcAvg(readFile("data2.txt"))
  data3 = calcAvg(readFile("data3.txt"))
  write(allNumAvg, myFile, append=TRUE)
  write((data1), myFile, sep = "\n")
  write((data2), myFile, sep = "\n")
  write(data3, myFile)
  close(myFile)
}

感谢!!!

1 个答案:

答案 0 :(得分:1)

您可以尝试稍微简化一下您的功能。我不知道你的数据究竟是什么样的,但是对于一个数字向量来计算所有奇数的平均值,你不需要for循环。这是一个例子:

test <- 1:10

mean(test[test %% 2 != 0]) #calculates the mean of all odd numbers in the vector
[1] 5

如果您的数据中包含NA,请添加na.rm=TRUE

test[1] <- NA
mean(test[test %% 2 != 0])    #wont work
[1] NA
mean(test[test %% 2 != 0], na.rm=TRUE)      #works
[1] 6