2016-06-30 48 views
0

我正在寫一個函數,它根據一個id值從數據表random中過濾掉一些隨機數據,但是我首先需要它先檢查數據表中是否有實際的數據行。我最終寫了一個if語句並使用is.null,但它仍然用於條件,但它不工作,並最終訪問else語句,然後給我一個錯誤。 下面發佈的代碼,請大家幫我如何檢查數據表是否有空行?

new.filterID <- function(DataTable,id) { 
    if(DataTable == is.null){ 
    return(print("No Data Available: ",id)) 
    } else { filtered <- subset(DataTable, ID == id) 
    return(aggregate(Value ~ YEAR_WW, filtered, mean)) 
    } 
} 
filteredData <- new.filterID(random, 213) 

我得到的錯誤,當我運行這是

Error in aggregate.data.frame(mf[1L], mf[-1L], FUN = FUN, ...) : 
    no rows to aggregate 

也低於空數據表random

Value YEAR_WW 
+1

使用'if(nrow(DataTable)== 0)'。該對象仍然存在,即使它不包含任何數據。 – lmo

+0

感謝它工作@lmo –

回答

1

我想你如果您只想檢查行數是否爲零,可以使用nrow

new.filterID <- function(DataTable,id) { 
    if(nrow(DataTable) == 0){ 
    return(print("No Data Available: ",id)) 
    } else { 
    filtered <- subset(DataTable, ID == id) 
    return(aggregate(Value ~ YEAR_WW, filtered, mean)) 
    } 
} 
filteredData <- new.filterID(random, 213) 

但是,如果你想檢查是否data.table爲空,你可以檢查是否有一些關於它的列:

new.filterID <- function(DataTable,id) { 
    if(nrow(DataTable) == 0 & length(names(DataTable)) == 0){ 
    return(print("No Data Available: ",id)) 
    } else { 
    filtered <- subset(DataTable, ID == id) 
    return(aggregate(Value ~ YEAR_WW, filtered, mean)) 
    } 
} 
filteredData <- new.filterID(random, 213) 

數據表還沒有檢查它是否是空的方法,但。