如何使用带有字符串字段功能的for循环?

时间:2016-02-06 16:08:32

标签: r for-loop statistics binning

我正在使用 smbinning R包来计算我的数据集中包含的变量信息值。

函数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"而result一个是"character"

那么,我的问题是如何计算每个变量的信息值并将其存储在以result为对象的对象中?

谢谢!任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:6)

没有提供样本数据我只能猜测以下内容是否有效:

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
}

答案 1 :(得分:5)

您可以尝试使用其中一种apply方法,迭代z计数。 xsmbinning的值应该是列名而不是列。

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

HTH