Ниже я создаю кадр данных, который называется 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 (данные $ ri [i] == TRUE)) проверяет, истинно ли значение THEN, проверяя, является ли его NA. Ваши скобки не совпадают. Второе, что вы делаете, как упоминалось выше, может быть сделано в одной строке. – Marsenau