Как использовать цикл for с функцией, требующей строкового поля?

Я использую пакет R smbinning для вычисления значения информации о переменных, включенной в мой набор данных.

Функция smbinning() довольно проста, и ее нужно использовать следующим образом:

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

Итак, df — это набор данных, который вы хотите проанализировать, y — целевая переменная, а x — это переменная, для которой вы хотите вычислить статистику значения информации; Я перечисляю все характеристические переменные как z1, z2, ... z417, чтобы иметь возможность использовать цикл for для механизации всего процесса анализа.

Я попытался использовать следующий цикл for:

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

чтобы иметь возможность вычислить значение информации для каждой переменной, соответствующей столбцу i кадра данных.

Класс DATA — это «data.frame», а resultone — это "character".

Итак, мой вопрос: как вычислить информационное значение каждой переменной и сохранить его в объекте с именем result?

Спасибо! Любая помощь будет оценена!


person Quantopik    schedule 06.02.2016    source источник
comment
Возможно, вам нужно ... x = names(DATA)[i], ... или ... x = DATA[, i], ...? "DATA[, i]" не будет обрабатывать i по-разному на каждой итерации, поскольку это всего лишь часть строки. Например. см. for(i in 1:3) print(paste("var_i")) VS for(i in 1:3) print(paste("var_", i, sep = "")). И, в зависимости от результата, вам понадобится что-то вроде result[i] или result[i, ] или result[, i]...   -  person alexis_laz    schedule 06.02.2016
comment
Привет @alexis_laz и спасибо за комментарий! Результатом является список, состоящий из 7 элементов по построению e с именами result$Cutpoint, result$CntRec, ...; Мне особенно нужно значение IV, которое можно найти, набрав result$iv и сохранив его.   -  person Quantopik    schedule 06.02.2016


Ответы (2)


Образцы данных не предоставлены. Я могу только предположить, что следующее будет работать:

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
}
person Tchotchke    schedule 25.04.2016
comment
Извините за задержку и спасибо за ответ! Вы знаете способ добавить к вам остальную часть награды? - person Quantopik; 07.05.2016

Вы можете попробовать использовать один из методов apply, перебирая z-счетчики. Значение x для smbinning должно быть именем столбца, а не столбцом.

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

Я пробовал следующее, так как вы не предоставили никаких данных

> 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
...

ХТН

person Dinesh    schedule 25.04.2016