apply et fonction utilisant les valeurs de plusieurs colonnes

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Elsa Bussière
Messages : 86
Enregistré le : 30 Mar 2011, 09:34
Contact :

apply et fonction utilisant les valeurs de plusieurs colonnes

Messagepar Elsa Bussière » 11 Avr 2017, 14:53

Bonjour,

J'ai un dataframe DA de dimensions 58, 150.
J'essaye de créer une 151eme colonne.

DA[,151] = f(DA[,1], DA[,2], DA[,3], ....., DA[,150])

Cette fonction "f" je l'ai écrite et elle s'appelle MinQ.

Code : Tout sélectionner

MinQ <- function(a, b) {
    quantile(a, probs = seq(0,1,.05), names = TRUE)
    b <- quantile[2]
    return (b)}


J'essaye de l'appliquer à toutes les lignes du tableau.
Voici ce que j'ai essayé:

Code : Tout sélectionner

DA$Qmin <- apply(DA, 1, function(x) MinQ(DA[c(1:150)]))


Voici le message d'erreur que je reçois:

Code : Tout sélectionner

Error in quantile[2] : object of type 'closure' is not subsettable


Pourriez-vous m'éclairer?

Merci,
Elsa
Elsa Bussière

Elsa Bussière
Messages : 86
Enregistré le : 30 Mar 2011, 09:34
Contact :

Re: apply et fonction utilisant les valeurs de plusieurs colonnes

Messagepar Elsa Bussière » 11 Avr 2017, 15:05

I also tried:

Code : Tout sélectionner

DA$Qmin <- apply(DA, 1, function(x) MinQ(x))

DA$Qmin <- apply(DA, 1, function(x) MinQ(DA[,c(1:150)]))

DA$Qmin <- apply(DA, 1, function(x) MinQ(x[c(1:150)]))

DA$Qmin <- apply(DA, 1, function(x) MinQ(x[,c(1:150)]))
Elsa Bussière

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: apply et fonction utilisant les valeurs de plusieurs colonnes

Messagepar Logez Maxime » 11 Avr 2017, 15:05

Bonjour,

le souci de ta fonction MinQ est que quand tu fais l'opération quantile(a, seq(0, 1, .05), names = TRUE) tu ne stockes pas le résultat de cette opération dans un objet par conséquent quand tu fais quantile[2] tu cherches à extraire le deuxième élement de quantile qui est une fonction et ce n'est pas possible d'extraire le deuxième élément d'une fonction.

D'une manière plus globale, je ne comprends pas le sens de ta fonction. Tu lui donnes pour argument b (function(a,b)) mais tu ne te sers pas de ce b dans la suite du code. Ensuite si tu cherches le quantile 0.05 alors pas besoin de calculer autant de quantiles pour n'en garder que le second.

Après quand tu utilise la fonction apply en faisant apply(DA, 1, ...) alors tu vas travailler sur tous les éléments qui se trouvent sur les lignes de DA. Tu n'as donc pas besoin de préciser que tu prends les 150 éléments puisque sur une ligne tu as 150 valeurs.

Code : Tout sélectionner

DA$Qmin <- apply(DA, 1, quantile, probs = 0.05)
Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité