2016-04-14 43 views
0

matris endeksleri dayanan döngüler için kaçınmak, ama bu max(i-4,1)R - Ben belki smoehow <code>apply</code> kullanılarak <code>for</code> döngüler kaçınarak şu hile yapmak mümkün olup olmadığını bilmek istiyorum

x <- matrix(seq_len(100),10,10) 
x[,1] <- letters[1:10] 
y <- x 
for (i in 1:nrow(x)) { 
    for (j in 2:ncol(x)) { 
    y[i,j] <- x[max(i-4,1),j] 
    } 
} 
ile bu durumda nasıl bilmiyorum
+0

Burada ne yapmaya çalışıyorsunuz? Değişken mi? Ve bu 'for' döngüsünden nasıl kaçınıyor? – Jason

+0

evet, bir gecikme olmalı ama ayrıca 0,5 * (x [i, j] + x [maks (i-4,1), j]) 'olmalıdır. Ben 'apply' kullanmaya çalışıyorum ama bir matris endeksi – Stefano

cevap

0

Basit bir gecikme işlevi istiyorsanız, data.tables ve data frame için çalışıyor. Matrislerle çalışmak için düzenleyebileceğinizden eminim.

#data table version 
lagging<- 
function (data, var, time) 
{ 
    return(c(rep(NA, time), head(data[, eval(as.name(var))], 
     (length(data[, eval(as.name(var))]) - time)))) 
} 

#data frame version 
lagging<- 
function (data, var, time) 
{ 
    return(c(rep(NA, time), head(data[, var], 
     (length(data[, var]) - time)))) 
} 
+0

Ok dayalı nasıl kullanacağımı bilmiyorum, ben benim durumum için nasıl adapte görmek için deneyin. Ancak, temel işlevleri kullanmanın bir yolu olmadığını onaylayabilirsiniz. Benim endişem – Stefano

+1

Ben ne onaylamak ne de reddediyorum;) – Jason