R 函数错误
R Function error
我有一个包含 17 个变量的数据集,所有变量 integer/num。
为了更好的描述性分析,我创建了这个用户定义的函数:
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)
我收到以下错误:
Error: evaluation nested too deeply: infinite recursion /
options(expressions=)? Error during wrapup: evaluation nested too
deeply: infinite recursion / options(expressions=)?
我试图了解问题所在,但一切都是徒劳,请帮助!
这就是您的函数的外观。但是你没有定义noofNA
,所以还是会报错
details <- function(x)
{
na.len <- sum(is.na(x))
m <- mean(x, na.rm=TRUE)
s <- sd(x, na.rm=TRUE)
mn <- min(x, na.rm=TRUE)
q1 <- quantile(x, 0.25, na.rm=TRUE)
q3 <- quantile(x, 0.75, na.rm=TRUE)
mx <- max(x, na.rm=TRUE)
UC1 <- m+3*s
LC1 <- m-3*s
UC2 <- quantile(x, 0.99, na.rm=TRUE)
LC2 <- quantile(x, 0.01, na.rm=TRUE)
iqr <- IQR(x, na.rm=TRUE)
UC3 <- q3+1.5*iqr
LC3 <- q1-1.5*iqr
ot <- mx>UC1 | mn<LC1 | mx>UC2 | mn<LC2 | mx>UC3 | mn<LC3
x[x>mx]<-mx
x[x<mn]<-mn
out_exist <- ifelse(noofNA > 0, "outlier_exists", "")
return(list(noofNA=na.len, mean=m, std=s, min=mn, q1=q1, q3=q3, max=mx, outlier=ot, out_exists= out_exist))
}
set.seed(123)
df1 <- data.frame(x = rnorm(100), y = rnorm(100))
sapply(df1, details)
我有一个包含 17 个变量的数据集,所有变量 integer/num。 为了更好的描述性分析,我创建了这个用户定义的函数:
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)
我收到以下错误:
Error: evaluation nested too deeply: infinite recursion / options(expressions=)? Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)?
我试图了解问题所在,但一切都是徒劳,请帮助!
这就是您的函数的外观。但是你没有定义noofNA
,所以还是会报错
details <- function(x)
{
na.len <- sum(is.na(x))
m <- mean(x, na.rm=TRUE)
s <- sd(x, na.rm=TRUE)
mn <- min(x, na.rm=TRUE)
q1 <- quantile(x, 0.25, na.rm=TRUE)
q3 <- quantile(x, 0.75, na.rm=TRUE)
mx <- max(x, na.rm=TRUE)
UC1 <- m+3*s
LC1 <- m-3*s
UC2 <- quantile(x, 0.99, na.rm=TRUE)
LC2 <- quantile(x, 0.01, na.rm=TRUE)
iqr <- IQR(x, na.rm=TRUE)
UC3 <- q3+1.5*iqr
LC3 <- q1-1.5*iqr
ot <- mx>UC1 | mn<LC1 | mx>UC2 | mn<LC2 | mx>UC3 | mn<LC3
x[x>mx]<-mx
x[x<mn]<-mn
out_exist <- ifelse(noofNA > 0, "outlier_exists", "")
return(list(noofNA=na.len, mean=m, std=s, min=mn, q1=q1, q3=q3, max=mx, outlier=ot, out_exists= out_exist))
}
set.seed(123)
df1 <- data.frame(x = rnorm(100), y = rnorm(100))
sapply(df1, details)