Ich versuche, eine schnelle Funktion zu programmieren, die als ein Vektor v
, und zwei Positionen left
und right
nimmt. Dann sollte die Funktion die Summe aller Untervektoren von v
zurückgeben, die sowohl left
als auch right
enthalten.Gruppieren der Untervektoren eines Vektors
Zum Beispiel, wenn v = c(v_1, v_2, v_3, v_4, v_5)
und left = 2
, right = 4
, dann sind die Subvektoren, die sowohl v_2
und v_4
enthalten sind:
c(v_1, v_2, v_3, v_4)
c(v_1, v_2, v_3, v_4, v_5)
c(v_2, v_3, v_4)
c(v_2, v_3, v_4, v_5)
Insbesondere v_2, v_3, v_4
werden immer von diesen Sets enthalten. Schließlich möchte ich eine Funktion, die
S(v, 2, 4) = c(sum(v[1:4]), sum(v[1:5]), sum(v[2:4]), sum(v[2:5]))
Meine aktuelle Lösung gibt v
in eine obere Dreiecksmatrix zu machen ist:
set.seed(1)
v <- rnorm(1:5)
vmat <- matrix(0, 5, 5)
for(i in 1:nrow(vmat)) for(j in i:nrow(vmat)) vmat[i,j] <- sum(v[i:j])
Darüber hinaus gibt es effizientere Wege, um diese Matrix zu erstellen, die here verglichen werden.
Und dann
Smat <-function(vmat, left, right) vmat[1:left, right:nrow(vmat)]
gibt die korrekten Summen.
Da diese Operation muss oft für verschiedene v
Vektoren passieren, ich bin interessiert, wenn ich dies auf eine intelligentere Weise programmieren kann. Ich finde, dass die aktuelle Implementierung suboptimal ist, weil ich für jeden Vektor eine Matrix zuordnen muss, von der ich nur das obere Dreieck verwende.
Nicht sehr klar für mich. ... Ich bekomme nicht * Zum Beispiel, wenn v = c (v_1, v_2, v_3, v_4, v_5) und links = 2, rechts = 4, dann muss ich sum (v [1: 4]) , Summe (v [1: 5]), Summe (v [2: 4]), Summe (v [2: 5]) * – Sotos
hat den Beitrag aktualisiert, so dass es klarer ist – Theodor