如何在R语言中重命名列表单个元素且不将其他元素设为<NA>
问题描述
我有一个未命名列表:
foo <- list(1, 2) foo #> [[1]] #> [1] 1 #> #> [[2]] #> [1] 2
当我尝试仅重命名其中一个元素时,其他元素的名称会变为<NA>:
names(foo)[2] <- "some_name" foo #> $<NA> #> [1] 1 #> #> $some_name #> [1] 2
但列表支持同时存在命名和未命名元素:
list(1, some_name = 2) #> [[1]] #> [1] 1 #> #> $some_name #> [1] 2
现有相关问题的解答仅覆盖重命名全部元素或已全命名列表的部分元素,请问如何重命名列表单个元素且不将其他元素变为<NA>?
解决方案
这是因为当列表原本没有名称(names(foo)返回NULL)时,直接通过下标赋值名称会强制生成一个长度与列表一致的名称向量,未指定名称的位置会被自动填充为<NA>。要保留其他元素的未命名状态,你需要先将名称向量初始化为空字符串,再给目标位置赋值:
# 初始化名称向量为对应长度的空字符串 names(foo) <- rep("", length(foo)) # 给第2个元素命名 names(foo)[2] <- "some_name" # 查看结果 foo #> [[1]] #> [1] 1 #> #> $some_name #> [1] 2
也可以直接构造名称向量一次性赋值,写法更简洁:
names(foo) <- c("", "some_name")
这样就能只给单个元素重命名,同时让其他元素保持未命名的状态。
内容的提问来源于stack exchange,提问作者bretauv
相关产品推荐
相关产品推荐

