通过 R 中的循环命名列表项

Sin*_*yas 5 for-loop r list

我想获取一个列表,创建一个列表项名称的字符串向量,用通用名称填充空格,然后将名称向量设置为列表的名称。

我的代码适用于没有名称的项目的列表。但是,当其中有带有名称的项目时,它什么也不做。

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)
}
Run Code Online (Sandbox Code Playgroud)

结果没有命名项目

$item1
[1] 2 3 4

$item2
[1] "hey" "ho" 
Run Code Online (Sandbox Code Playgroud)

结果与命名项目

[[1]]
[1] 2 3 4

[[2]]
[1] "hey" "ho" 

$hello
[1] 2 3 4
Run Code Online (Sandbox Code Playgroud)

希望你能帮忙。

Ric*_*ven 5

听起来您想在当前没有名称的地方插入名称。如果是这种情况,我建议使用直接赋值 via 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"
Run Code Online (Sandbox Code Playgroud)

我们可以使用以下内容将名称插入到空名称元素中。这也适用于向量,前提是右侧向量与左侧向量的长度相同。

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
Run Code Online (Sandbox Code Playgroud)

对于包含零星空名称的较长列表,您可以使用

names(list)[!nzchar(names(list))] <- namesToAdd
Run Code Online (Sandbox Code Playgroud)

nzchar 基本上表示“非零字符”,如果元素是非零长度字符串,则返回逻辑值 TRUE。