2017-05-14 4 views
0

J'ai recherché d'autres solutions, elles fonctionnent mais pas dans ce cas. Je crée une fonction qui parcourt la trame de données et étale la variable Factor en une nouvelle variable fictive. Certains algorithmes d'apprentissage automatique ne peuvent pas gérer les facteurs. Pour ce faire, j'utilise à l'intérieur de la fonction de nettoyage la fonction spread(). Lorsque je tente de transmettre un nom d'une colonne que je dois répandre jeter une erreur:Erreur mystérieuse lors du passage du nom de colonne à une fonction dans R

Error: Invalid column specification

Voici le code: si je remplace key = as.character(substitute(name)) avec key = "state"

library(tidyr) 
library(dplyr)  
library(C50) # this is one source for the churn data 
data(churn) 


f <- function(df, name) { 
    df$dummy <- c(1:nrow(df))  # create dummy variable with unique values 

    df <- spread(df, key <- as.character(substitute(name)), "dummy", fill = 0) 
} 

churnTrain = f(churnTrain, name = "state") 
str(churnTrain) 

Bien sûr, il fonctionne très bien mais toute la fonction perd sa réutilisabilité. Je demande à Google pour une solution de chasse de quelques jours, mais rien ne fonctionne. J'utilise ici l'ensemble de données de R, donc il est facile de reproduire les résultats. Comment passer le nom de la colonne à la fonction interne sans erreur?

Merci pour l'aide!

Répondre

0

Avez-vous besoin d'utiliser tidyverse?

Sinon, vous pouvez essayer le paquet reshape2 plus:

 

library(reshape2) 
library(C50) # this is one source for the churn data 
data(churn) 

f <- function(df1, name) { 
    df1$dummy <- 1:nrow(df1) # create dummy variable with unique values 
    df1 <- dcast(df1, as.formula(paste0("dummy~", name))) 
} 

ct1 <- f(churnTrain, name = "state") 

Si vous devez absolument travailler tidyverse, vous pouvez essayer de suivre le tutoriel à http://dplyr.tidyverse.org/articles/programming.html. Malheureusement, leurs exemples ne fonctionnent pas sur ma machine.

0
library(tidyr) 
library(dplyr)  
library(C50) # this is one source for the churn data 
data(churn) 


f <- function(df, name) { 
    df$dummy <- c(1:nrow(df))  # create dummy variable with unique values 

    df <- spread_(df, key = name, "dummy", fill = 0) 
} 

churnTrain = f(churnTrain, name = "state") 
str(churnTrain)