R 如果不使用apply,如何检查数据帧中的列是否为因子?

R 如果不使用apply,如何检查数据帧中的列是否为因子?,r,R,我目前有一个函数,它使用sapply来检查列是否是数据帧,当我在另一个函数中调用它时,它会给我带来问题。长话短说,我只是想看看是否有其他方法可以做到这一点 if (sapply(df[,col],is.factor)) { 这是我目前正在使用的,但我想取消apply的使用。既然在if中使用它,为什么不直接将is.factor函数应用于列呢 if(is.factor(df[,col])){ .... } 这里有一个黑客。 我无法判断它是否适用于问题的情况,因为没有数据集示例。我将使

我目前有一个函数,它使用sapply来检查列是否是数据帧,当我在另一个函数中调用它时,它会给我带来问题。长话短说,我只是想看看是否有其他方法可以做到这一点

   if (sapply(df[,col],is.factor)) {

这是我目前正在使用的,但我想取消apply的使用。

既然在if中使用它,为什么不直接将is.factor函数应用于列呢

if(is.factor(df[,col])){
   ....
}

这里有一个黑客。

我无法判断它是否适用于问题的情况,因为没有数据集示例。我将使用内置数据集
iris

col <- "Species"

s <- capture.output(str(iris))
grepl("Factor", s[grep(col, s)])
#[1] TRUE

col如果您知道列的名称,为什么不
is.factor(df$col)
checkFactorCol <- function(x, col){
  s <- capture.output(str(x))
  grepl("Factor", s[grep(col, s)])
}

checkFactorCol(iris, "Sepal.Length")  # FALSE
checkFactorCol(iris, "Species")       # TRUE
checkFactorCol <- Vectorize(checkFactorCol, "col")

checkFactorCol(iris, names(iris))
#Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
#       FALSE        FALSE        FALSE        FALSE         TRUE