J'aimerais savoir pourquoi cela se produit et comment je pourrais le faire de façon plus éloquente. Quand j'utilise sapply, je voudrais qu'il retourne une matrice 3x2, mais il renvoie une matrice 2x3. Pourquoi est-ce? Et pourquoi est-il difficile de joindre ceci à un autre cadre de données?Pourquoi retourne-t-il une matrice que j'ai besoin de transposer, puis la matrice transposée ne sera pas attachée à une base de données?
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))
quand je tente de joindre ces derniers,
b[,c('col2','col3')] <- t(out)
L'erreur que je reçois est:
Warning message:
In `[<-.data.frame`(`*tmp*`, , c("col2", "col3"), value = list(1, :
provided 6 variables to replace 2 variables
bien que le suivant semble donner le résultat souhaité:
rownames(out) <- c('col1', 'col2')
b <- cbind(b, t(out))
Je ne peux pas opérer le variables e:
b$var1/b$var2
retours
Error in b$var1/b$var2 : non-numeric argument to binary operator
Merci!
Qu'est-ce que vous essayez de faire avec ces données? Votre exemple ne fait vraiment rien de significatif. – hadley
@hadley: L'exemple suit les directives de publication R de fournir un exemple minimal et pratique. Le cas réel est plutôt complexe et la complexité nuirait à la question centrale. La fonction que j'utilise pour estimer la sensibilité d'un modèle à 20 paramètres différents en utilisant une extension de série taylor, et accepte une trame de données 20x8 comme entrée. Je serais heureux d'envoyer un exemple reproductible complet si vous le souhaitez, bien qu'il ne soit pas encore prêt à être rendu public. –
Vous devez rechercher un juste milieu entre quelque chose qui est facile à comprendre et quelque chose qui capture l'essence du problème avec lequel vous luttez.Dans votre exemple actuel, il semble que vous essayez d'obtenir que 'b' soit égal à' a'. – hadley