【问题标题】:Recursive looping in rr中的递归循环
【发布时间】:2015-08-02 17:08:18
【问题描述】:

我是 R 的新手,但我想递归地循环遍历给定列表的元素,作为 presice,我有一个向量列表,其中第一个向量由 (1,2,3,4) 给出,然后我现在想要循环遍历该向量并将获得的第二个向量附加到原始列表中,再次遍历列表中的第二个向量并获得也附加到原始列表中的第三个向量,依此类推。我有这个代码开始`

occlist <- list()
occ_cell <- c(1,2,3,4)

for(i in occ_cell){
  occ_cell <- seq(i,4*i, by = 1)
  occlist[[i]] <- occ_cell
}
`

给出以下列表

#[[1]]
#[1] 1 2 3 4

#[[2]]
#[1] 2 3 4 5 6 7 8

#[[3]]
# [1]  3  4  5  6  7  8  9 10 11 12

#[[4]]
# [1]  4  5  6  7  8  9 10 11 12 13 14 15 16

我想更清楚,让我们有下图

【问题讨论】:

  • 为什么?那里有问题吗?为什么你会丢失每个向量的第一个(几个)元素。我以为你会想要这个lapply(4 * 1:4, sequence)

标签: r


【解决方案1】:
recOcc <- function(i) {
    if (i == 0) return ( NULL )
    append( recOcc(i-1), list(seq(i, 4*i)) )
}

并且,调用 with (重现你的输出)

recOcc(4)
# [[1]]
# [1] 1 2 3 4
# 
# [[2]]
# [1] 2 3 4 5 6 7 8
# 
# [[3]]
#  [1]  3  4  5  6  7  8  9 10 11 12
# 
# [[4]]
#  [1]  4  5  6  7  8  9 10 11 12 13 14 15 16

您也可以在递归调用中使用Recall 来命名您的递归函数,这样可以更改函数名称。

编辑

对于树形结构,你可以试试这个

## i is the number to start the sequence
## depth determines how deep to recurse
recOcc2 <- function(i, depth=3, cur.depth=0) {
    if (depth==cur.depth) return(seq(i, 4*i))
    acc <- as.list(seq(i, 4*i))
    for (ii in seq_along(acc))
        acc[[ii]] <- recOcc2(acc[[ii]], depth, cur.depth+1)
    acc
}

## To recreate the simple list
res <- recOcc2(1, depth=1)

## For nested lists
res <- recOcc2(1, depth=2)

【讨论】:

  • 感谢您的快速回复,但是,我认为我的问题没有很好地表达,我正在使用值树,在树的第一级我们有值 1,在第二级我们具有值 (1,2,3,4) 并且第三级中的值是从第二级派生的,因此对于第二级中的 1,我们在第三级中具有 (1,2,3,4),对于 2 在第二级我们在第三级有(2,3,4,5,6,7,8),对于第二级我们有(3,4,5,6,7,8,9,10,11) ,12) 和第二级的四个我们有 (4,5,6,7,8,9,10,11,12,13,14,15,16)。所以循环的目的是递归计算。
  • @EvansOtieno 我不确定我是否理解,但请尝试编辑,看看是否有效。
  • 我希望我可以附上我想要的副本,但他们可以选择附上,或者有没有办法我可以写方程式,这样你就可以得到我想要的真实图片
  • @EvansOtieno 编辑有效吗?要访问图片第 2 级中的元素,例如第 4 个组件,您可以执行 res[[1]][[4]]
猜你喜欢
  • 2017-12-06
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 2018-06-27
相关资源
最近更新 更多