我通过from JSON()从一个JSON文件中收集了一个深度嵌套的列表.下面是一个最小的示例,显示了嵌套,但只有2个条目:
说
conditions <- list(
list(
PMID = 00001,
Phrases = list(
list(
PhraseText = "Hodgkin Lymphoma",
Mappings = mappings1 <- list(
list(
MappingScore = 1000,
MappingCandidates = mc1 <- list(
list(CandidateScore = 1000,
CandidateCUI = "C075655",
CandidateMatched = "Hodgkins Lymphoma",
CandidatePreferred = "Hodgkins Lymphoma",
MatchedWords = list(c("hodgkin", "lymphoma"))),
list(CandidateScore = 850,
CandidateCUI = "C095659",
CandidateMatched = "Lymphoma",
CandidatePreferred = "Lymphoma",
MatchedWords = list(c("lymphoma"))))
)
)
)
)
),
list(
PMID = 00002,
Phrases = list(
list(
PhraseText = "Plaque Psoriasis",
Mappings = mappings2 <- list(
list(MappingScore = 1000,
MappingCandidates = mc2 <- list(
list(CandidateScore = 1000,
CandidateCUI = "C0125609",
CandidateMatched = "Plaque Psoriasis",
CandidatePreferred = "Plaque Psoriasis",
MatchedWords = list(c("plaque", "psoriasis"))),
list(CandidateScore = 750,
CandidateCUI = "C0320011",
CandidateMatched = "Psoriasis",
CandidatePreferred = "Psoriasis",
MatchedWords = list(c("psoriasis")))))
)
)
)
)
)
说
这些级别中的一些实际上是数据帧,但我似乎无法在不 destruct struct 的情况下在代码中重新创建它. 我正在try 从嵌套列表的多个级别提取特定元素,理想情况下会得到如下所示的输出(或类似的输出):
说
output <- data.frame(
PhraseText = c("Hodgkins Lymphoma", "Hodgkins Lymphoma", "Plaque Psoriasis", "Plaque Psoriasis"),
MappingScore = c(1000, 1000, 1000, 1000),
CandidateScore = c(1000, 850, 1000, 750),
CandidateCUI = c("C075655", "C095659", "C0125609", "C0320011"),
CandidatePreferred = c("Hodgkins Lymphoma", "Lymphoma", "Plaque Psoriasis", "Psoriasis")
)
说
我try 了几次lApply、map和hoist的迭代--但是循环遍历列表的未命名部分(即MappingCandidate[[1]]和MappingCandidate[[2]])让我感到困惑,而且我似乎无法获得链中最深层的元素(即CandiateCUI)并与顶级元素(PhraseText)相关联.
说
x <- lapply(conditions, function(i) {
lapply(i[["Phrases"]][[1]][["Mappings"]], function(j) {
lapply(j[["MappingCandidates"]], function(k) {
k[c("CandidateScore", "CandidateCUI", "CandidatePreferred")]
})
})
})
说