创建一个命名列表元素,如果它在 R 中不存在
create a named list element, if it doesnt exist already in R
我有一个列表 masterList
,我想在其中附加另一个列表:contentList
和 contentList2
。内容列表是属于“01-response”的结果 - masterList
.
的第一个元素
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"]]
。但是,我希望所有内容都存储在 masterList 中的命名列表中:`masterList[["01-response"]][["contents"]],如:
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-response"]][["contents"]] 是否存在。如果它存在,我只是追加。如果它不存在,我需要先创建它。
让我们将元素指定为变量,例如: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
是一个预先存在的列表。
回答您的问题之一:
How can i check if "content" exists at the level of masterList[[listElement]]
?
"content" %in% names(masterList[["01-response"]])
我有一个列表 masterList
,我想在其中附加另一个列表:contentList
和 contentList2
。内容列表是属于“01-response”的结果 - masterList
.
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"]]
。但是,我希望所有内容都存储在 masterList 中的命名列表中:`masterList[["01-response"]][["contents"]],如:
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-response"]][["contents"]] 是否存在。如果它存在,我只是追加。如果它不存在,我需要先创建它。
让我们将元素指定为变量,例如: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
是一个预先存在的列表。
回答您的问题之一:
How can i check if "content" exists at the level of
masterList[[listElement]]
?
"content" %in% names(masterList[["01-response"]])