如何在R函数中用带条件的循环判断变量类型并输出归类信息
R语言:判断数据集变量类型并分类输出的正确实现
需求说明
编写R语言函数,遍历数据集的每个变量:
- 若变量为
factor类型,输出 变量x属于表1 - 其余类型变量,输出 变量x属于表2
示例数据集
patientID <- c(1, 2, 3, 4) age <- c(25, 34, 28, 52) diabetes <- c("Type1", "Type2", "Type1", "Type1") status <- c("Poor", "Improved", "Excellent", "Poor") patientdata <- data.frame(patientID, age, diabetes, status) patientdata$diabetes <- factor(patientdata$diabetes) patientdata$status <- factor(patientdata$status)
错误实现代码
data_variables <- function(data_set){ for(i in names(data_set)){ if(class(i) == "factor"){ var_details <- paste0(data_set$i, " belongs in table 1") } else{ var_details <- paste0(data_set$i, " belongs in table 2") } } }
错误原因
- 判断对象错误:
class(i)检查的是变量名(字符串)的类型,永远不可能等于"factor",应该判断变量本身的类型 - 变量引用错误:
data_set$i无法正确引用变量,当i是字符串时,必须用data_set[[i]]来定位对应变量 - 无输出逻辑:函数仅定义了
var_details变量,但没有打印或返回结果,执行后看不到任何输出 - 类型判断不严谨:
class()可能返回多类型值,用is.factor()判断因子类型更可靠
正确实现
方式1:循环遍历版
data_variables <- function(data_set){ for(var_name in names(data_set)){ if(is.factor(data_set[[var_name]])){ cat(paste0("变量", var_name, "属于表1\n")) } else { cat(paste0("变量", var_name, "属于表2\n")) } } }
方式2:向量化简洁版(无需循环)
data_variables <- function(data_set){ is_factor_vec <- sapply(data_set, is.factor) output_text <- ifelse(is_factor_vec, paste0("变量", names(data_set), "属于表1"), paste0("变量", names(data_set), "属于表2")) cat(paste(output_text, collapse = "\n")) }
预期输出
调用data_variables(patientdata)后,输出结果为:
变量patientID属于表2 变量age属于表2 变量diabetes属于表1 变量status属于表1
内容的提问来源于stack exchange,提问作者Mando
相关产品推荐
相关产品推荐

