2017-05-26 58 views
0

我有下面的源代碼。 if (is.na(monthData))用於檢查monthData是否爲NA。如果是,則爲其分配一個初始值。爲什麼我會在R中得到這個警告,條件是長度大於1並且只有第一個元素會被使用

monthData <- NA 
if (category == 'QUARTER') { 
    for (m in c(rep(1:4))) { 
    md <- NA 
    md <- queryDataForQuarter(year, str_c(m), kpi) 
    if (is.na(monthData)) { 
     monthData <- md[0,] 
    } 
    monthData[nrow(monthData) + 1,] <- md[1,] 
    } 
} 

我在運行代碼時得到了低於警告值。我的代碼有什麼問題?

In if (is.na(monthData)) { ... : the condition has length > 1 and only the first element will be used

+0

我無法運行您的代碼。我指定類別< - 'QUARTER',但我仍然缺少函數queryDataForQuarter。 – dvarelas

回答

2

你的第一次迭代monthData後是一個數據框,呼叫is.na(monthData)將創建邏輯值的數據幀。 if語句僅使用該數據幀的第一個元素,因此如果md[0,0]將是NA,則將初始化monthData兩次。

你可以initialze monthDataNULL,然後再檢查length(monthData) == 0

monthData <- NULL 
if (category == 'QUARTER') { 
    for (m in c(rep(1:4))) { 
    md <- NA 
    md <- queryDataForQuarter(year, str_c(m), kpi) 
    if (length(monthData) == 0) { 
     monthData <- md[0,] 
    } 
    monthData[nrow(monthData) + 1,] <- md[1,] 
    } 
} 
1

如果功能無法大小比1以上的載體來運行我相信is.na(monthData)包含多個元素。通過調試模式 檢查它 - 使用瀏覽器()。

R給出了一個警告(而不是一個錯誤),因爲它是小的錯誤的寬鬆(寬鬆),並且有一個出路,即選擇矢量的第一個元素並繼續前進。

相關問題