【问题标题】:How to modify a vector dynamically while iterating over it in R如何在 R 中迭代向量时动态修改向量
【发布时间】:2016-09-20 09:12:46
【问题描述】:

在多种编程语言中,例如python,可以在迭代时动态修改列表,即删除最后一个元素

    list = [1,2,3,4]
    for i in a:
        a.pop()

在这种情况下,如果我们在每次迭代中打印 i 和 a,我们将得到 2 次迭代,

    i=1; a=[1,2,3]
    i=2; a=[1,2] 

但是,如果我们使用

    a = a[:-1] 

而不是

   a.pop()

我们得到的是四次迭代。 i = 1:4 并且列表每次少一个元素。

我在 R 中工作,并希望实现第一个,能够在我迭代的同时修改我正在迭代的向量。

有可能吗?如何实现?

谢谢!

【问题讨论】:

  • 通常您会过滤一个序列并创建一个新序列,例如使用列表推导式。
  • 你想要a[ -length(a)] 吗?如果您反复调用它,它将每次删除a 的最后一个元素。

标签: python r loops dynamic iteration


【解决方案1】:

R 使用“修改时复制”,这实际上意味着在这种情况下它将像切片(à la a = a[:-1])而不是就地修改(à la a.pop())。 head(L,-1)L[-length(L)]L[1:(length(L)-1)] 都是 Python 的 a[:-1] 等价的 R 习惯用法。

L <- as.list(1:4)
for (i in L) { print(length(L)); L=head(L,-1) }
## [1] 4
## [1] 3
## [1] 2
## [1] 1

在 R 中获得按引用调用的行为是相当具有挑战性的;我认为这是不可能的。来自?for

“for”循环中的“seq”在循环开始时计算;随后更改它不会影响循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多