我有一个嵌套的列表对象cc.在嵌套列表中,我想找出是否有名为"StartDate"的项,并将名称更新为"OccurenceStartDate". 现在,我可以兴致勃勃地列出名字,找到名字,然后手动更新.有没有更好的办法?我需要使这个过程自动化.

此外,我还需要更新OccurenceStartDate值的格式.我可以手动分配格式.

cc <- list(ConceptSets = list(list(id = 0L, name = "test cs", expression = list(
        items = list(list(concept = list(CONCEPT_ID = 1569193L, CONCEPT_NAME = "Cerebral infarction", 
                                         STANDARD_CONCEPT = "", STANDARD_CONCEPT_CAPTION = "", 
                                         INVALID_REASON = "V", INVALID_REASON_CAPTION = "Valid", 
                                         CONCEPT_CODE = "I63", DOMAIN_ID = "Condition", VOCABULARY_ID = "ICD10CM", 
                                         CONCEPT_CLASS_ID = "3-char nonbill code"), isExcluded = FALSE, 
                          includeDescendants = TRUE, includeMapped = FALSE))))), 
        PrimaryCriteria = list(CriteriaList = list(list(ConditionOccurrence = list(
            CodesetId = 0L, Age = list(Op = "eq", Value = 15L), StartDate = list(
                Op = "bt", Value = structure(17532, class = "Date"), 
                Extent = structure(18628, class = "Date"))))), ObservationWindow = list(
                    PriorDays = 0L, PostDays = 0L), PrimaryCriteriaLimit = list(
                        Type = "First")), QualifiedLimit = list(Type = "First"), 
        ExpressionLimit = list(Type = "First"), InclusionRules = list(), 
        CensoringCriteria = list(), CollapseSettings = list(CollapseType = "ERA", 
                                                            EraPad = 0L), CensorWindow = structure(list(), names = character(0)), 
        cdmVersionRange = ">=5.0.0")

    names(rapply(cc, function(x) head(x)))
    
    names(cc$PrimaryCriteria$CriteriaList[[1]]$ConditionOccurrence)[3] <- "OccurrenceStartDate"
    
    cc$PrimaryCriteria$CriteriaList[[1]]$ConditionOccurrence$OccurrenceStartDate$Value <- cc$PrimaryCriteria$CriteriaList[[1]]$ConditionOccurrence$OccurrenceStartDate$Value %>% format( "%m-%d-%Y")

这不会更新姓名,而只是列出姓名

names(rapply(cc, function(x) head(x))) %>% str_replace_all(pattern = "StartDate","OccurrenceStartDate")

推荐答案

包含{data.tree}的解决方案:

library(data.tree)

## build tree from list:
cc_tree <- FromListSimple(cc)

## update tree in place
cc_tree$Do(function(node) node$name = gsub("StartDate", "OccurrenceStartDate", node$name)) 

## retransform tree to list:
cc_renamed <- ToListSimple(cc_tree)
## > cc_renamed
$name
[1] "Root"

$cdmVersionRange
[1] ">=5.0.0"

$ConceptSets
$ConceptSets$name
[1] "ConceptSets"

## ...

$PrimaryCriteria$CriteriaList$`1`$ConditionOccurrence$OccurrenceStartDate
$PrimaryCriteria$CriteriaList$`1`$ConditionOccurrence$OccurrenceStartDate$name

## ...

R相关问答推荐

逐行替代引用前一行的for循环

根据列中的数字移动单元格位置

从字符载体创建函数参数

检测(并替换)字符串中的数学符号

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

x[[1]]中的错误:脚注越界

查找图下的面积

如何求解arg必须为NULL或deSolve包的ode函数中的字符向量错误

用黄土法确定区间

将数据集中的值增加到当前包含的最大值

使用across,starts_with和ifelse语句变更多个变量

如果某些列全部为NA,则更改列

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

使用RSelenium在R中抓取Reddit时捕获多个标签

将标识符赋给事件序列,避免错误观察

我如何go 掉盒子图底部的数字?

在点图上绘制置信度或预测区间ggplot2

将工作目录子文件夹中的文件批量重命名为顺序

使用列中的值来调用函数调用中应使用的其他列

网络抓取新闻标题和时间