R语言如何通过for循环批量应用as.factor函数及现有代码失效原因
代码失效原因
- 你编写的管道操作仅对提取出的列子集做了临时转换,全程没有将转换后的结果赋值回原数据框
d,因此原数据的字段类型不会发生任何变化 - 链式操作末尾的
lapply(., is.factor)仅会输出转换后的临时对象的字段类型判断结果,该结果不会回写到原数据
正确实现方案
方案1:for循环实现
首先定义需要转换为因子的变量列表,再循环遍历完成赋值即可:
# 定义待转因子的列名列表 factor_cols <- c("block", "CR", "T1.ACC", "T1.correct", "T1.response") # 循环批量转换,注意用双括号[[]]引用动态列名 for (col in factor_cols) { d[[col]] <- as.factor(d[[col]]) }
转换完成后执行lapply(d[factor_cols], is.factor)即可校验所有目标列的转换结果。
方案2:dplyr风格简洁实现(无需for循环)
如果习惯使用管道操作,可直接通过across函数完成批量转换,记得将操作结果赋值回原数据框:
library(dplyr) d <- d %>% mutate(across(c(block, CR, T1.ACC, T1.correct, T1.response), as.factor))
内容的提问来源于stack exchange,提问作者12666727b9
相关产品推荐
相关产品推荐

