2016-02-06 31 views
8

Sto utilizzando il pacchetto smbinning R per calcolare il valore di informazioni delle variabili incluso nel mio set di dati.Come utilizzare il ciclo for con una funzione che richiede un campo stringa?

La funzione smbinning() è piuttosto semplice e deve essere utilizzato come segue:

result = smbinning(df= dataframe, y= "target_variable", x="characteristic_variable", p = 0.05) 

Quindi, df è il set di dati che si desidera analizzare, y variabile di destinazione e x è la variabile di cui si desidera calcolare le statistiche del valore informativo; Io enumera tutte le variabili caratteristiche come z1, z2, ... z417 per poter usare un ciclo for per meccanizzare tutto il processo di analisi.

ho cercato di utilizzare il seguente ciclo:

for (i in 1:417) { 
result = smbinning(df=DATA, y = "FLAG", x = "DATA[,i]", p=0.05) 
    } 

per essere in grado di calcolare il valore di dati per ciascuna variabile corrispondente a i colonna del dataframe.

La classe DATA è "data.frame" mentre la result è "character".

Quindi, la mia domanda è come calcolare il valore di informazione di ogni variabile e memorizzarlo nell'oggetto denominato result?

Grazie! Qualsiasi aiuto sarà apprezzato!

+4

Forse, è necessario '... x = nomi (DATA) [i], .. .' o '... x = DATA [, i], ...'? '" DATA [, i] "' non tratterà "i" in modo diverso in ogni iterazione in quanto è solo parte di una stringa. Per esempio. vedi 'for (i in 1: 3) print (incolla (" var_i "))' VS 'per (i in 1: 3) print (incolla (" var_ ", i, sep =" "))'. E, a seconda del risultato, avrai bisogno di qualcosa come 'result [i]' o 'result [i,]' o 'result [, i]' ... –

+0

Ciao @alexis_laz e grazie per il commento ! Risultato è una lista composta da 7 elementi per costruzione e chiamata risultato $ Cutpoint, risultato $ CntRec, ...; Ho particolarmente bisogno del valore IV che si può trovare digitando il risultato $ iv e memorizzandolo. – Quantopik

risposta

6

Nessun dati di esempio viene fornito posso azzardare solo un'ipotesi che il seguente funzionerà:

results_list = list()  
for (i in 1:417) { 
    current_var = paste0('z', i) 
    current_result = smbinning(df=DATA, y = "FLAG", x = current_var, p=0.05) 
    results_list[i] = current_result$iv 
} 
+0

Ci scusiamo per il ritardo e grazie per la risposta! Conosci un modo per aggiungere a te il resto della taglia? – Quantopik

5

Si potrebbe provare a utilizzare uno dei metodi apply, scorrere il z-conti. Il valore x a smbinning dovrebbe essere il nome della colonna e non la colonna.

results = sapply(paste0("z",1:147), function(foo) { 
    smbinning(df=DATA, y = "FLAG", x = foo, p=0.05) 
}) 
class(results) # should be "list" 
length(results) # should be 147 
names(results) # should be z1,... 
results[[1]] # should be the first result, so you can also iterate by indexing 

Ho provato quanto segue, dal momento che non aveva fornito alcun dato

> XX=c("IncomeLevel","TOB","RevAccts01") 
> res = sapply(XX, function(z) smbinning(df=chileancredit.train,y="FlagGB",x=z,p=0.05)) 
Warning message: 
NAs introduced by coercion 
> class(res) 
[1] "list" 
> names(res) 
[1] "IncomeLevel" "TOB"   "RevAccts01" 
> res$TOB 
... 

HTH