【发布时间】:2015-10-23 09:55:35
【问题描述】:
我有一个包含 17 个变量的数据集,它们都是整数/数字。 为了更好的描述性分析,我创建了这个用户定义的函数:
sum <- function(x)
{
na.len<-sum(is.na(x))
mean<-mean(x,na.rm=T)
sd<-sd(x,na.rm=T)
min<-min(x,na.rm=T)
q1<-quantile(x,0.25,na.rm=T)
q3<-quantile(x,0.75,na.rm=T)
max<-max(x,na.rm=T)
UC1=mean+3*sd
LC1=mean-3*sd
UC2=quantile(x,0.99,na.rm=T)
LC2=quantile(x,0.01,na.rm=T)
iqr=IQR(x,na.rm=T)
UC3=q3+1.5*iqr
LC3=q1-1.5*iqr
ot<-max>UC1 | min<LC1 | max>UC2 | min<LC2 | max>UC3 | min<LC3
x[x>max]<-max
x[x<min]<-min
out_exist <- ifelse(noofNA > 0, "outlier_exists", "")
return(c(noofNA=na.len,mean=mean,std=sd,min=min,q1=q1,q3=q3,max=max,outlier=ot, out_exists= out_exist))
}
当我在我的数据集上使用这个函数时:
apply(df, 2, sum)
我收到以下错误:
错误:评估嵌套太深:无限递归 / 选项(表达式=)?总结期间出错:评估也嵌套 深度:无限递归/选项(表达式=)?
我试图了解问题所在,但徒劳无功,请帮助!
【问题讨论】:
-
如果你问为什么这段代码不起作用,它应该包含在一个最小的可重现示例中。我还建议将功能拆分为小部分,然后找到它不工作的地方。
-
您将函数命名为
sum,然后在其中调用函数sum来执行求和。更改函数的名称。 -
另外,不要这样做
mean<-mean(x,na.rm=T),而不是命名结果mean尝试使用这样的东西:meanResult <- mean(x, na.rm = TRUE) -
证明:
sum <- function(x){ sum(x) }; sum(1)。Error: evaluation nested too deeply: infinite recursion / options(expressions=)? -
我更新了函数:
标签: r function user-defined-functions