[data.table package] Select colonne by variable and return vector

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

jeremie jacquemin
Messages : 11
Enregistré le : 07 Jan 2019, 15:40

[data.table package] Select colonne by variable and return vector

Messagepar jeremie jacquemin » 15 Fév 2019, 13:23

Bonjour,

Je découvre le package data.table et je voudrais sélectionner une colonne dans mon data.table (data.frame) par une variable et qui me renvoie un vecteur et non un data.table.

Exemple :

Code : Tout sélectionner

set.seed(456)
don <- data.table(col1 = rbinom(10,1,0.5),
                  col2 = c(1:10))

myfunc <- function(par1, par2) {
 
  don[par1==1,par2]
 
}

myfunc("col1", "col2")

# je veux qu'il me retrouve ce calcul : don[col1==1,col2] -> 3 4 5


Merci,

Jérémie

Guillaume Devailly
Messages : 28
Enregistré le : 22 Déc 2017, 12:31

Re: [data.table package] Select colonne by variable and return vector

Messagepar Guillaume Devailly » 15 Fév 2019, 15:07

La fonction get() semble être la solution :

Code : Tout sélectionner

library(data.table)
set.seed(456)
don <- data.table(col1 = rbinom(10,1,0.5),
                  col2 = c(1:10))

myfunc <- function(par1, par2) {
   
    don[get(par1) == 1, get(par2)]
   
}

myfunc("col1", "col2")

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: [data.table package] Select colonne by variable and return vector

Messagepar Mickael Canouil » 17 Fév 2019, 13:10

Bonjour,

plutôt que get() qui va chercher un objet dans l'environnement, je suggère simplement d'écrire différemment la fonction.
De plus, il n'est pas bon d'avoir des variables globales (effet secondaire dangereux), comme ici ou "don" n'est pas donné en argument dans la fonction.

Code : Tout sélectionner

library(data.table)
set.seed(456)
don <- data.table(
  col1 = rbinom(10,1,0.5),
  col2 = c(1:10)
)

myfunc <- function(par1, par2, data) {
  data[[par2]][data[[par1]]==1]
}

myfunc(par1 = "col1", par2 =  "col2", data = don)
Mickaël
mickael.canouil.fr | rlille.fr

jeremie jacquemin
Messages : 11
Enregistré le : 07 Jan 2019, 15:40

[Résolu] Re: [data.table package] Select colonne by variable and return vector

Messagepar jeremie jacquemin » 18 Fév 2019, 08:42

Bonjour,

Effectivement, c'est cette syntaxe avec double [[ ]] que je cherchais plutôt que Get().

Merci Mickael !

Jérémie


Retourner vers « Questions en cours »

Qui est en ligne

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