2014-05-25 49 views
0

有人可以幫我解決這個問題嗎?我收到這個錯誤:Error in if (numList[i]%%2 != 0) { : missing value where TRUE/FALSE needed。我知道這意味着我的一些數據是NA,但我不知道如何解決這個問題。在讀文件功能中需要TRUE/FALSE時缺少值

我想要做的是讀三個文件,計算所有奇數的平均值並將這些值保存到'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)) 
} 

而且功能: 功能來calc下的平均

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

你可以嘗試簡化你的功能一點點。我不知道你的數據看起來像什麼,但是對於一個數字矢量來計算所有奇數的均值,你不需要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 
+0

它的作品!謝謝! – Jakubee