如何用lapply转换列表中数据框的idCode列数据类型?
用lapply实现列表中数据框列类型转换的正确方法
当然可以用lapply搞定这个需求,先帮你分析下之前尝试的问题:
- 第一个写法
lapply(allData, function(x) x$idCode <- as.character(x$idCode)),问题出在函数最后返回的是赋值操作的结果(也就是转换后的idCode列),而且你没有把lapply的输出重新赋值给allData,所以原列表完全没变化,只得到了一堆单独的列。 - 第二个写法报错是因为语法问题:在大括号里的两行代码之间没有加换行或者分号,R没办法识别语句的分界,所以才会报
unexpected symbol错误。
正确的lapply写法
只需要修正语法,并且把lapply的结果重新赋值给allData就行:
# 多行写法,可读性更强 allData <- lapply(allData, function(x) { x$idCode <- as.character(x$idCode) x # 一定要返回修改后的整个数据框 })
如果想写成一行,记得在赋值语句和返回x之间加分号:
allData <- lapply(allData, function(x) {x$idCode <- as.character(x$idCode); x})
其他可选方法
如果你熟悉tidyverse工具链,用purrr::map配合dplyr::mutate会更简洁:
library(purrr) library(dplyr) allData <- map(allData, ~ mutate(.x, idCode = as.character(idCode)))
核心要点记住:R里函数不会原地修改输入对象,必须把处理后的结果重新赋值给原变量;自定义函数一定要返回完整的数据框,而不是只返回修改的列。
内容的提问来源于stack exchange,提问作者FINNNNN
相关产品推荐
相关产品推荐

