我有一个列表masterList
,我想向它附加另一个列表:contentList
和contentList2
。内容列表是属于";01响应"-CCD_ 4。
masterList <- list("01-response" = NULL, "02-response" = NULL,"03-response" = NULL,"04-response" = NULL,"05-response" = NULL)
contentList <- list(item1 = "text", item2 = "text2")
contentList2 <- list(item1 = "moretext", item2 = "moretext2")
我想把contentList
和contentList2
附加到masterList[["01-response"]]
。然而,我希望所有内容都存储在master列表中的命名列表中:`masterList[["01响应"]][["内容"]],如:
masterList
$`01-response`
$`01-response`$content
$`01-response`$content$item1
[1] "text"
$`01-response`$content$item2
[1] "text2"
$`01-response`$content$item1
[1] "moretext"
$`01-response`$content$item2
[1] "moretext2"
$`02-response`
NULL
$`03-response`
NULL
$`04-response`
NULL
$`05-response`
NULL
问题出在附件上。在我追加之前,我需要检查"masterList[["01响应"]][["内容"]]是否存在。如果它存在,我只需附加。如果它不存在,我需要先创建它。
用于将元素指定为变量,例如:listElement <- "01-response"
。如果我添加第三个列表contentList3 <- list(item1 = "moretext3", item2 = "moretext4")
,我只需运行:
`listElement <- "01-response"`
if(exists("content", where = masterList[[listElement]])){
masterList[[listElement]][["content"]] <- append(masterList[[listElement]][["content"]],
contentList3)
}else{
masterList[[listElement]] <- append(masterList[[listElement]],
list(content = contentList3))
}
但是,如果masterList
为空,则此代码会中断:
masterList
$`01-response`
NULL
$`02-response`
NULL
$`03-response`
NULL
$`04-response`
NULL
$`05-response`
NULL
exists("content", where = masterList[[listElement]])
Error in as.environment(where) : using 'as.environment(NULL)' is defunct
我怎样才能检查";内容";是否存在于masterList[[listElement]]
级别?
注意:这种情况发生在函数内部,因此我希望保持灵活性并避免使用masterList[["01-response"]]
。我使用masterList[[listElement]]
,其中listElement <- "01-response"
我认为您可以在不知道content
是否已经存在的情况下工作。
masterList[["01-response"]]$content <- c(masterList[["01-response"]]$content, contentList, contentList2)
str(masterList)
# List of 5
# $ 01-response:List of 1
# ..$ content:List of 4
# .. ..$ item1: chr "text"
# .. ..$ item2: chr "text2"
# .. ..$ item1: chr "moretext"
# .. ..$ item2: chr "moretext2"
# $ 02-response: NULL
# $ 03-response: NULL
# $ 04-response: NULL
# $ 05-response: NULL
这样做的诀窍是,如果x
是NULL
,则c(x, y)
将创建;如果x
是预先存在的列表,则将附加。
回答您的一个问题:
如何检查是否"内容";是否存在于
masterList[[listElement]]
级别
"content" %in% names(masterList[["01-response"]])