2016-05-23 28 views
1

在多種編程語言,例如Python的載體,它能夠動態修改的列表,同時通過迭代,即,去除的最後一個元素如何修改動態而遍歷它作爲R

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

在這種情況下,如果我們打印我和在每次迭代,我們將得到2次迭代,

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

然而,如果我們使用

a = a[:-1] 

代替

a.pop() 

我們得到的是四次反覆。 i = 1:4,並且列表每次少一個元素。

我在R工作組,並希望實現第一,能夠修改其上我在同一時間,我重複迭代向量。

可能嗎?如何實現它?

謝謝!

+0

通常你會篩選程序和使用列表理解創造一個新的,例如。 –

+0

你想'一[-length(一)]'?如果調用迭代它會刪除的'了'每次最後一個元素。 –

回答

1

R使用「copy on modify」,這意味着在這種情況下,它將起到像切片一樣的作用(àla a = a[:-1])而不是就地修改(àla a.pop())。 head(L,-1)L[-length(L)]L[1:(length(L)-1)]都是等價的[R成語和Python a[:-1]

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'在循環的開始處計算;隨後更改它不會影響循環。