Gradirei approfondire perché questo accade e come potrei farlo in modo più eloquente.Perché restituisce saggiamente una matrice che devo trasporre, e quindi la matrice trasposta non si collegherà a un dataframe?
Quando uso saply, mi piacerebbe che restituisse una matrice 3x2, ma restituisce una matrice 2x3. Perchè è questo? E perché è difficile collegarlo a un altro frame di dati?
a <- data.frame(id=c('a','b','c'), var1 = c(1,2,3), var2 = c(3,2,1))
out <- sapply(a$id, function(x) out = a[x, c('var1', 'var2')])
#out is 3x2, but I would like it to be 2x3
#I then want to append t(out) (out as a 2x3 matrix) to b, a 1x3 dataframe
b <- data.frame(var3=c(0,0,0))
quando provo a collegare questi,
b[,c('col2','col3')] <- t(out)
L'errore che ottengo è:
Warning message:
In `[<-.data.frame`(`*tmp*`, , c("col2", "col3"), value = list(1, :
provided 6 variables to replace 2 variables
anche se la seguente sembra dare il risultato desiderato:
rownames(out) <- c('col1', 'col2')
b <- cbind(b, t(out))
Non posso operare su variabili e:
b$var1/b$var2
restituisce
Error in b$var1/b$var2 : non-numeric argument to binary operator
Grazie!
Cosa stai cercando di fare con questi dati? Il tuo esempio in realtà non fa nulla di significativo. – hadley
@hadley: l'esempio segue le linee guida sulla pubblicazione di R per fornire un esempio minimo e praticabile. Il caso reale è piuttosto complesso e la complessità sottrarrebbe alla domanda centrale. La funzione che ho stima la sensibilità di un modello a 20 parametri diversi utilizzando un'espansione di serie Taylor e accetta un dataframe 20x8 come input. Sarei felice di inviare un esempio completo riproducibile se lo desideri, anche se non è ancora pronto per essere reso pubblico. –
Devi cercare un mezzo felice tra qualcosa che sia facile da capire e qualcosa che catturi l'essenza del problema con cui stai lottando.Nel tuo esempio attuale sembra che tu stia cercando di ottenere che 'b' sia uguale a' a'. – hadley