成功执行后,R函数不会没有输出

时间:2016-02-13 17:30:49

标签: r function

我写了一个关于如何计算数据集中缺失百分比的R函数,它成功执行但是当我将函数应用于我的数据集时,没有输出,没有错误消息。我通过将df替换为disease来单独执行函数中每行代码,运行良好。发生了什么事?

> Missingss <- function(df){
+     len <- length(colnames(df))
+     n <- nrow(df)
+     name <- colnames(df)
+ 
+     for (i in 1:len) {
+         if (length(subset(is.na(df[,i]), is.na(df[,i]) == 1 )) == 0)
+             sprintf ('no missing for variable %s', name[i])
+             
+         else 
+             sprintf ('missing in %s, rate %1.2f', name[i], length(subset(is.na(df[,i]), is.na(df[,i]) == 1 ))/n)
+     }
+ }
> Missingss(disease)
> 

数据集的潜行峰值

> head(disease)
  Year Gender   Age Disease Cases_in_1000s
1 1990    All  0-17  Asthma            182
2 1990    All 18-24  Asthma             23

1 个答案:

答案 0 :(得分:2)

sprintf只返回一个字符串。如果要输出,可以cat此字符串。请注意,cat不会生成换行符,因此您可能需要调整格式字符串以包含\n

Missingss <- function(df){
   len <- length(colnames(df))
   n <- nrow(df)
   name <- colnames(df)

   for (i in 1:len) {
     nna <- length(which(is.na(df[,i])))
     if (nna == 0)
       cat(sprintf('No missing for variable %s\n', name[i]))
     else 
       cat(sprintf('Missing in %s, rate %1.2f\n', name[i], nna/n))
   }
}

关于计算NA的另一个注意事项:您可以使用length(which(is.na(df[,i])))代替,在可读性方面稍微好一些。

> test <- iris
> test$Sepal.Length[42] <- NA
> test$Species[1:50] <- NA
> test$Sepal.Width <- NA
> Missingss(test)
Missing in Sepal.Length, rate 0.01
Missing in Sepal.Width, rate 1.00
No missing for variable Petal.Length
No missing for variable Petal.Width
Missing in Species, rate 0.33
>