Zeigen der Arbeit der rekursiven Funktion: Sie können nur eine einfache Schleife und berechnen Spalte für Spalte wie schreiben. In R
, um eine rekursive Funktion zu erstellen Recall()
wird in ihm angewendet. Für weitere Informationen über Recall()
finden ?Recall
x <- c(0, 1, 2)
len <- length(x) + 12
myfun <- function(x, len)
{
n <- length(x)
print(x)
if(n < len) {
y <- (x[ n ] - min(x[ n - 1 ], x[ n - 2 ]))
x <- c(x, y)
Recall(x, len)
} else {
return(x)
}
}
myfun(x, len)
# [1] 0 1 2
# [1] 0 1 2 2
# [1] 0 1 2 2 1
# [1] 0 1 2 2 1 -1
# [1] 0 1 2 2 1 -1 -2
# [1] 0 1 2 2 1 -1 -2 -1
# [1] 0 1 2 2 1 -1 -2 -1 1
# [1] 0 1 2 2 1 -1 -2 -1 1 3
# [1] 0 1 2 2 1 -1 -2 -1 1 3 4
# [1] 0 1 2 2 1 -1 -2 -1 1 3 4 3
# [1] 0 1 2 2 1 -1 -2 -1 1 3 4 3 0
# [1] 0 1 2 2 1 -1 -2 -1 1 3 4 3 0 -3
# [1] 0 1 2 2 1 -1 -2 -1 1 3 4 3 0 -3 -3
Hinweis: print
Befehl innerhalb myfun()
Funktion entfernen und dann die folgenden Schritte aus.
Wenden Sie den Datenrahmen df1
auf die rekursive Funktion an.
result <- apply(df1, 1, function(x) {
len <- length(x) + 12 # you can change this number from 12 to any desired value.
myfun(x, len)
})
result <- t(result) # transpose results
result
# X1 X2 X3 X3 X3 X3 X3 X3 X3 X3 X3 X3 X3 X3 X3
# [1,] 0 1 2 2 1 -1 -2 -1 1 3 4 3 0 -3 -3
# [2,] 0 1 3 3 2 -1 -3 -2 1 4 6 5 1 -4 -5
# [3,] 0 1 4 4 3 -1 -4 -3 1 5 8 7 2 -5 -7
# [4,] 0 2 3 3 1 -2 -3 -1 2 5 6 4 -1 -5 -4
# [5,] 0 2 4 4 2 -2 -4 -2 2 6 8 6 0 -6 -6
# [6,] 0 3 4 4 1 -3 -4 -1 3 7 8 5 -2 -7 -5
# [7,] 1 2 3 2 0 -2 -2 0 2 4 4 2 -2 -4 -2
# [8,] 1 2 4 3 1 -2 -3 -1 2 5 6 4 -1 -5 -4
# [9,] 1 3 4 3 0 -3 -3 0 3 6 6 3 -3 -6 -3
# [10,] 2 3 4 2 -1 -3 -2 1 4 6 5 1 -4 -5 -1
do.call('cbind', list(df1, result))
# X1 X2 X3 X1 X2 X3 X3 X3 X3 X3 X3 X3 X3 X3 X3 X3 X3 X3
# 1 0 1 2 0 1 2 2 1 -1 -2 -1 1 3 4 3 0 -3 -3
# 2 0 1 3 0 1 3 3 2 -1 -3 -2 1 4 6 5 1 -4 -5
# 3 0 1 4 0 1 4 4 3 -1 -4 -3 1 5 8 7 2 -5 -7
# 4 0 2 3 0 2 3 3 1 -2 -3 -1 2 5 6 4 -1 -5 -4
# 5 0 2 4 0 2 4 4 2 -2 -4 -2 2 6 8 6 0 -6 -6
# 6 0 3 4 0 3 4 4 1 -3 -4 -1 3 7 8 5 -2 -7 -5
# 7 1 2 3 1 2 3 2 0 -2 -2 0 2 4 4 2 -2 -4 -2
# 8 1 2 4 1 2 4 3 1 -2 -3 -1 2 5 6 4 -1 -5 -4
# 9 1 3 4 1 3 4 3 0 -3 -3 0 3 6 6 3 -3 -6 -3
# 10 2 3 4 2 3 4 2 -1 -3 -2 1 4 6 5 1 -4 -5 -1
ändern Spaltennamen colnames()
Funktion
Daten:
df1 <- structure(list(X1 = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 2L),
X2 = c(1L, 1L, 1L, 2L, 2L, 3L, 2L, 2L, 3L, 3L),
X3 = c(2L, 3L, 4L, 3L, 4L, 4L, 3L, 4L, 4L, 4L)),
.Names = c("X1", "X2", "X3"),
row.names = c(NA, -10L),
class = "data.frame")
Nun, es gibt ein Problem mit „min (Temp [i-2], Temperatur [, i-3]) ". Es berechnet die Min ** aller Werte ** der 2 Spalten temp [, i-2] und temp [, i-3] ... was nicht richtig ist. Das "min" ist auf die Werte einer Zeile zu berechnen. – Andrew
@Andrew Ändern Sie einfach 'min' zu' pmin' und es sollte funktionieren – ira
Natürlich! Entschuldigung für meinen Fehler ... Danke. – Andrew