R检查变量是否是一个因素

时间:2014-08-07 20:49:37

标签: r loops

我正在尝试编写一个可以应用于数据帧的循环。循环将基本检查数据框中的每个变量,并告诉我哪个变量是一个因素。

一个例子:

test1<-c("red","red","blue","yellow")
test1<-as.factor(test1)
test2<-c(1,2,3,4)

variable<-c("test1","test2")
count<-2

for (i in 1:count)
{
        if (is.factor(paste(variable[i]))==TRUE) 
        { 
           print("This is a factor")
        }
}

test1变量应该是一个因子,因此是句子&#34;这是一个因素&#34;应该打印。但没有发生任何事我想知道为什么?

2 个答案:

答案 0 :(得分:2)

这是一个评估问题。字符数组“test1”或“test2”不是因素。

> is.factor(get(variable[1]))
[1] TRUE
> is.factor(get(variable[2]))
[1] FALSE

答案 1 :(得分:2)

尝试使用sapplylapply代替您for循环,如下所示:

variable <- data.frame(test1,test2)
sapply(variable,is.factor) # returns a vector
test1 test2 
 TRUE FALSE

lapply(variable,is.factor) # returns a list
$test1
[1] TRUE

$test2
[1] FALSE

或者您可以轻松使用您的功能而不是is.factor

编辑:(感谢Ananda Mahto) vapply甚至比sapply

更快
require(microbenchmark)
microbenchmark(
  vapply(variable,is.factor, c(is.factor=FALSE)),
  sapply(variable,is.factor),
  lapply(variable,is.factor),
  times = 10000
)
Unit: microseconds
                                              expr    min     lq median     uq      max neval
 vapply(variable, is.factor, c(is.factor = FALSE)) 12.248 13.829 14.618 15.409  959.698 10000
                       sapply(variable, is.factor) 31.608 35.560 36.350 37.534 1159.618 10000
                       lapply(variable, is.factor)  9.877 11.458 11.853 12.644  935.597 10000