Ich möchte bestimmte Werte aus dem Vektor extrahieren und sie dann in meiner Funktion verwenden. Ich werde es am Beispiel erklären.R: Extrahieren Sie Werte aus dem Vektor und verwenden Sie sie in Funktion, um den Unterschied zu berechnen
Diese alle Berechnungen finden in glänzende App statt, dieses Beispiel ist eine vereinfachte Version.
Im Moment ...
I berechnen die Zeitdifferenz der jede Probe zwischen zwei Temperaturpunkte für die X-Achse (die Proben unter Verwendung von ID-Spalte kann differenziert) (im Beispiel unten x1 = 600 -> es ist ein reaktiver Wert in meiner glänzenden App und x2 = 800 -> es ist ein konstanter Wert).
####Sample data
data <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,2L, 2L),
Zeit = c(0L, 180L, 360L, 420L, 600L, 604L, 0L, 180L,360L, 480L, 600L,
605L), Temp = c(963L, 824L, 666L, 658L, 641L,549L, 957L, 823L, 661L,
660L, 642L, 562L)), .Names = c("id","Zeit", "Temp"), row.names = c(NA,
12L), class = "data.frame")
####Calculating the time for x=600 (in my app it is a reactive value)
Zt <- vapply(unique(data$id), function(a){
with(data[data$id == a,], approx(x = Temp, y = Zeit, xout = paste(600)))$y ###in my original data it is a reactive value:paste(input$t8xzeit)
}, double(1))
datat5 <- data.frame(ID = unique(data$id), Zeit= Zt)
####Calculating the time for x=800
Zt2 <- vapply(unique(data$id), function(a){
with(data[data$id == a,], approx(x = Temp, y = Zeit, xout = paste(800)))$y
}, double(1))
datat8 <- data.frame(ID = unique(data$id), Zeit2= Zt2)
####Merging the data
datat85 <- merge(datat5,datat8,by="ID")
####Calculating the difference
datat85$delta <- (datat85$Zeit - datat85$Zeit2)
Was ich tun muss ...
wenn wir x1 = 600 (die reaktive Wert ist) und x2 = 800, und wir wollen, dass alle Werte zwischen 600 und 800 zu 50 erhalten wir: 600.650.700.750.800. Dann muss ich jeden dieser Werte in meiner Funktion verwenden: Zt
(siehe oben im Code) als xout =...
und für jeden berechneten Wert eine neue Spalte erstellen.
Gibt es eine Möglichkeit, es irgendwie automatische zu machen (Schleife?)? Es ist nicht möglich, jedes Mal, wenn neue Zt
Funktion zu schreiben, da die Anzahl der Werte im Vektor könnte aufgrund des reaktiven Wert x1 ändern.
Vielen Dank für Ihre Hilfe!
data.new <- data.frame(ID = unique(data$id))
vals <- seq(600,800,by=50)
data.new[paste("Zeit",vals,sep="")] <- sapply(vals,function(xout.input) {
vapply(unique(data$id), function(a){
with(data[data$id == a,], approx(x = Temp, y = Zeit, xout = xout.input))$y
}, double(1))
})
Dies funktioniert durch sapply
mit Zt
für alle gewünschten Werte anzuwenden enthalten die Schaffung einer Matrix, deren Spalten die Ergebnisse:
'dat [seq (x1, x2, durch = 50)]'? Nicht sicher: * "Zeitdifferenz berechnen s/w die extrahierten Temp-Werte und ** immer Temp 800 **", das macht für mich keinen Sinn. – r2evans
naja, es ist schwer zu erklären, aber ich versuche mein Bestes zu geben Ich erkläre zum Beispiel, wenn wir x1 = 600 und x2 = 800 haben, und wir wollen alle Werte zwischen 600 und 800 von 50, erhalten wir: 600,650,700,750,800 Dann muss ich jeden dieser Werte in meiner Funktion verwenden: ** Zt ** (siehe Code oben) als 'xout = ...' und erstelle eine neue Spalte mit berechnetem Wert –