如何用purrr::map对数据框列表指定列应用编码设置函数?
解决purrr::map应用自定义编码函数到指定列的问题
嘿,我来帮你搞定这个purrr的问题!你之前的写法list1 %>% map(setEncoding[c("name", "psb")])没法生效,是因为这种写法完全不符合函数传递的逻辑——你试图从setEncoding函数里提取"name"和"psb"元素,但setEncoding是个函数,不是列表,自然不会有效果。
咱们换个思路:对于列表里的每个数据框,我们需要针对指定列(name、psb)单独应用setEncoding函数,下面给你两种简洁的实现方式:
方法1:用purrr::modify_at(最符合purrr风格)
modify_at是purrr专门用来修改对象指定部分的函数,刚好适合咱们的场景——给每个数据框的指定列应用编码设置:
library(purrr) list1_fixed <- list1 %>% map(~ modify_at(.x, .vars = c("name", "psb"), .f = setEncoding))
解释一下:
~用来创建匿名函数,.x代表列表中的每个数据框.vars = c("name", "psb")指定要修改的列.f = setEncoding就是你自定义的编码设置函数
方法2:map结合基础R的lapply(不用额外依赖)
如果你不想用额外的工具函数,也可以用基础R的lapply处理数据框的指定列,再放回原数据框:
list1_fixed <- list1 %>% map(function(df) { # 对指定列应用setEncoding df[c("name", "psb")] <- lapply(df[c("name", "psb")], setEncoding) # 返回处理后的完整数据框 df })
验证结果
现在你可以查看处理后的结果,比如打印第一个数据框的name列:
print(list1_fixed[[1]]$name) # 输出:"Ľubietovský Vepor" print(list1_fixed[[2]]$psb) # 输出:"S TANAP"
numb列会保持原样,完全符合你的需求。
内容的提问来源于stack exchange,提问作者maycca
相关产品推荐
相关产品推荐

