下面我創建一個名爲c_data
的數據框。請注意,變量ri
有一個缺失值。函數輸出中的NULL來自哪裏?
然後我寫一個函數來檢查數據。如果ri
缺少數據,則一步就是停止該功能。 (我從函數中刪除了與我的問題不相關的語法)。
我提供輸出。
函數按預期執行,除了打印NULL
以及預期的結果。爲什麼打印NULL
?
#create data to test function
r <- c(.15, .10, NA)
N <- c(100, 86, 56)
chrvar <- c("a", "b", "c")
c_data <- as.data.frame(cbind(r,N, chrvar))
#change variable type from factor to numeric
c_data$r <- as.numeric(c_data$r)
#change N variable type from factor to integer
c_data$N <- as.integer(c_data$N)
#change chrvar from factor to character
c_data$chrvar <- as.character(c_data$chrvar)
str(c_data)
myFun <- function(ri= ri, ni=ni, data = data)
{
#add ri and ni to the data frame named data
data$ri <- ri
data$ni <- ni
#does ri have any missing data
num.missing.ri <- 0
for (i in 1:nrow(data))
{
if (is.na(data$ri[i] == TRUE)) num.missing.ri = num.missing.ri + 1
}
if(num.missing.ri != 0)
{
print(cat("Number of missing values in ri is", num.missing.ri,"\n"))
stop("ri has missing data. myFun is terminated.")
}
}
myFun(ri = r, ni = N, data = c_data)
這會產生這樣的輸出:
myFun(ri = r, ni = N, data = c_data)
##Number of missing values in ri is 1
##NULL
## Error in myFun(ri = r, ni = N, data = c_data) :
## ri has missing data. myFun is terminated.
爲什麼其打印NULL?
只是FYI,你可以通過'sum(is.na(data $ column))獲得一列中缺失值的數量' – adibender
這可能是因爲你的函數實際上並沒有返回任何值,它只是告訴R打印在那種情況下。定義函數時可能嘗試執行'return'命令? – cgage
夫婦的事情:首先我注意到(is.na(data $ ri [i] == TRUE))正在檢查值是否爲真然後檢查它的NA。你的括號不匹配。其次,正如我之前提到的那樣,你可以在一行中完成。 – Marsenau