我想获取一个列表,创建一个列表项名称的String向量,用通用名称填充空白,然后将名称向量设置为列表的名称。
我的代码适用于没有包含名称的项目的列表。但是,如果有名称的项目,则无效。
addNamesToList <- function(myList){
listNames <- vector()
for(i in 1:length(myList)){
if(identical(names(myList[i]),NULL)){
listNames <- c(listNames,paste("item",i,sep=""))
}else{
listNames <- c(listNames,names(myList[i]))
}
}
names(myList) <- listNames
return (myList)
}
没有命名项目的结果
$item1
[1] 2 3 4
$item2
[1] "hey" "ho"
带有命名项目的结果
[[1]]
[1] 2 3 4
[[2]]
[1] "hey" "ho"
$hello
[1] 2 3 4
希望你能提供帮助。
答案 0 :(得分:4)
听起来你想在当前没有名字的地方插入名字。如果是这种情况,我建议通过names(x) <- value
使用直接分配,而不是使用循环来填充空白。
在以下示例中,lst
创建了三个元素的示例列表,其中第二个元素未命名。请注意,即使只有一个列表元素具有名称,其names
向量也是与lst
长度相同的字符向量。
( lst <- list(item1 = 1:5, 6:10, item3 = 11:15) )
# $item1
# [1] 1 2 3 4 5
#
# [[2]]
# [1] 6 7 8 9 10
#
# $item3
# [1] 11 12 13 14 15
names(lst)
# [1] "item1" "" "item3"
我们可以使用以下内容在空名称元素中插入名称。如果右侧矢量与左侧矢量的长度相同,这也适用于矢量。
names(lst)[2] <- "item2"
lst
# $item1
# [1] 1 2 3 4 5
#
# $item2
# [1] 6 7 8 9 10
#
# $item3
# [1] 11 12 13 14 15
对于包含偶发空名称的较长列表,您可以使用
names(list)[!nzchar(names(list))] <- namesToAdd
nzchar
基本上意味着&#34;非零字符&#34;如果元素是非零长度字符串,则返回逻辑TRUE。