R语言使用lapply重命名嵌套列表最内层元素失败原因咨询
代码不生效的核心原因
- 嵌套逻辑错误,多套了一层
lapply。外层lapply遍历得到的x本身就是需要修改名称的内层列表(也就是list(A=1,B=2,C=3)这个结构),不需要再用一层lapply遍历x的单个元素。你内层lapply操作的是1、2、3这种单个原子值,单个原子值本身没有列表名称属性,修改自然无效。 - 自定义函数没有返回修改后的对象。R中函数默认返回最后一行表达式的求值结果,你内层代码
names(y) <- my_names的返回值是my_names本身,不是修改后的数据对象,就算逻辑正确也拿不到预期结果。
正确实现代码
直接遍历外层列表的每个子列表,修改子列表的名称后返回即可:
# 写法1:显式修改名称后返回 name_changer <- lapply(my_nested_list, FUN = function(x) { names(x) <- my_names return(x) }) # 写法2:用内置setNames函数简化代码 name_changer <- lapply(my_nested_list, setNames, nm = my_names)
运行后查看names(name_changer$D)就能看到已经替换为"X" "Y" "Z",所有内层列表的名称都会同步修改完成。
内容的提问来源于stack exchange,提问作者nateroe
相关产品推荐
相关产品推荐

