Abe*_*Abe 7 recursion nested r list
我有一个列表,如:
mylist <- list(a = 1, b = list(A = 1, B = 2), c = list(C = 1, D = 3))
Run Code Online (Sandbox Code Playgroud)
是否有一种(无循环)方式来识别元素的位置,例如,如果我想用5替换"C"的值,并且找到元素"C"的位置并不重要,我可以做某事吗?喜欢:
Aindex <- find_index("A", mylist)
mylist[Aindex] <- 5
Run Code Online (Sandbox Code Playgroud)
我试过了grepl,在当前的例子中,以下内容将起作用:
mylist[grepl("C", mylist)][[1]][["C"]]
Run Code Online (Sandbox Code Playgroud)
但这需要假设嵌套级别.
我问的原因是我有一个深度的参数值列表,以及一个替换值的命名向量,我想做类似的事情
replacements <- c(a = 1, C = 5)
for(i in names(replacements)){
indx <- find_index(i, mylist)
mylist[indx] <- replacements[i]
}
Run Code Online (Sandbox Code Playgroud)
这是对我之前的问题的改编,使用R中的xpath更新节点(深度未知)?,使用R列表而不是XML
一种方法是使用unlist和relist.
mylist <- list(a = 1, b = list(A = 1, B = 2), c = list(C = 1, D = 3))
tmp <- as.relistable(mylist)
tmp <- unlist(tmp)
tmp[grep("(^|.)C$",names(tmp))] <- 5
tmp <- relist(tmp)
Run Code Online (Sandbox Code Playgroud)
因为来自unlist的列表名称与a连接在一起.,所以您需要注意grep以及如何命名参数.如果.您的任何列表名称中没有a ,那么这应该没问题.否则,类似的名称list(.C = 1)将落入模式并被替换.
| 归档时间: |
|
| 查看次数: |
1544 次 |
| 最近记录: |