2014-04-05 35 views
0

我如何简化使用它()语句下面的代码:将复杂的声明,()

install.packages("ISLR") 
library(ISLR) 
Auto <- na.omit(Auto) 
q <- numeric(0); 
for (i in seq(names(Auto))) { 
    if ((class(eval(parse(text=paste('Auto$',names(Auto)[i],sep="")))) == "numeric") & 
    (length(table(eval(parse(text=paste('Auto$',names(Auto)[i],sep=""))))) > 15)) { 
    q <- cbind(q,i)} 
} 

这不仅仅是多个if-then语句更多。我正在确定有关每列中数据的分类和分布情况。

回答

1

您可以使用lapply抢大约每列中的信息数据帧:

classes <- unlist(lapply(Auto, class)) 
num.unique <- unlist(lapply(Auto, function(x) length(unique(x)))) 

然后,你可以找到数值变量的指标与动辄超过15个元素:

which(classes == "numeric" & num.unique > 15) 
#   mpg displacement horsepower  weight acceleration 
#   1   3   4   5   6 
+0

(自动,功能(x)长度(独特(x))))> 15) 工程很棒! thx –

+0

当然,或者'哪(unlist(lapply(Auto,function(x)class(x)==“numeric”&length(unique(x))> 15))) – josliber

+0

更好。 :-) –