Aşağıda c_data
adlı bir veri çerçevesi oluşturuyorum. ri
değişkeninin bir eksik değeri olduğunu unutmayın.NULL işlevi çıktığında nereden geliyor?
Daha sonra verileri denetleyen bir işlev yazıyorum. Bir adım ri
eksik veri varsa bu işlevi durdurmaktır. (Bu işlevin sözümle alakası olmayan sözdizimini kaldırdım).
Çıktı sağlarım.
İşlev, beklenen sonuca ek olarak NULL
'u yazdırdığı sürece beklendiği gibi çalışır. Neden NULL
yazıyor?
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.
Neden NULL yazdırmak kapsamaz:
#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)
Bu, bu çıktıyı üretir? cat
işlevinin dönüş değeri olduğu için
Sadece FYI, bir sütundaki eksik değerlerin sayısını 'sum (is.na (data $ column))' – adibender
ile edinebilirsiniz. Bunun nedeni, işlevinizin gerçekten herhangi bir değer döndürmemesi olabilir, bunun yalnızca R'ye yazdırılması anlatılıyor olabilir bu şart altında. Muhtemelen fonksiyonu tanımlarken 'return' komutunu uygulamayı deneyin? – cgage
çift şey: ilk fark ettim (is.na (veri $ ri [i] == DOĞRU)) değerinin true olup olmadığını kontrol ediyor. Parantezleriniz eşleşmedi. İkincisi, benden önce bahsettiğiniz gibi, bir satırda yapılabilir. – Marsenau