基本的にスコアリングモデリングのワークフローを自動化しようとしていて、ループによって生成された結果をsmbinning()
から入力する際に問題が発生しました。リスト。結果そのものはリストなので、リストにはたくさんのリストがあります。データフレームに結果(連続変数のバケット)を追加しようとすると、問題が発生します。私は、リストのレベルに飛び込むために必要な構文を入力することは不可能であることが分かりました。私は、列番号を参照して、ループからそれぞれのリスト名を渡そうとすることで、この問題を回避しようとしました。エラーが発生しました:ループ内でsmbinning.gen()を使用してリストにアクセスする
[.data.frame(df、、col_id)のエラー:未定義の列が選択されました。
colcnt <- ncol(e_mod) bucket_resultlist <- list() for (i in 2:colcnt) { #curvar = paste0('z', i) curresult = smbinning(df = e_mod, y = "Bankrupt", x = colnames(e_mod)[i], p = 0.05) bucket_resultlist[[paste0('Bin_Result_', colnames(e_mod)[i])]] = curresult #paste0('binresult', colnames(e)[i]) = curresult } e_mod2 = e_mod for (i in 1:length(bucket_resultlist_trunc)) { e_mod2 = smbinning.genCUSTOM(e_mod, bucket_resultlist_trunc[[i]] , chrname = i) }
標準形でそれだけに
$ivtable
を連結しようとする私も、これを可能にするためにsmbinning.gen()
機能の顧客のバージョンを定義しようとしました:次のように私のコードがある
リストの参照ですが、この生成されたリストから1つのレベルをスキップして、そのリストのそれぞれのリストに対してsmbinning.gen()
を実行する必要があります。カスタムコードとコメントのコメントは次のとおりです。
smbinning.genCUSTOM = function(df, ivout, chrname = "NewChar") {
df = cbind(df, tmpname = NA)
ncol = ncol(df)
col_id = paste0(ivout, '[[6]]', collapse = NULL) # Original: ivout$col_id
# Updated 20160130
b = paste0(ivout, '[[4]]', collapse = NULL) # Original: ivout$bands
df[, ncol][is.na(df[, col_id])] = 0 # Missing
df[, ncol][df[, col_id] <= b[2]] = 1 # First valid
# Loop goes from 2 to length(b)-2 if more than 1 cutpoint
if (length(b) > 3) {
for (i in 2:(length(b) - 2)) {
df[, ncol][df[, col_id] > b[i] & df[, col_id] <= b[i + 1]] = i
}
}
df[, ncol][df[, col_id] > b[length(b) - 1]] = length(b) - 1 # Last
df[, ncol] = as.factor(df[, ncol]) # Convert to factor for modeling
blab = c(paste("01 <=", b[2]))
if (length(b) > 3) {
for (i in 3:(length(b) - 1)) {
blab = c(blab, paste(sprintf("%02d", i - 1), "<=", b[i]))
}
} else { i = 2 }
blab = c(blab, paste(sprintf("%02d", i), ">", b[length(b) - 1]))
# Are there ANY missing values
# any(is.na(df[,col_id]))
if (any(is.na(df[, col_id]))) {
blab = c("00 Miss", blab)
}
df[, ncol] = factor(df[, ncol], labels = blab)
names(df)[names(df) == "tmpname"] = chrname
return(df)
}
すべてのご協力をいただきありがとうございます。
は、ここでこれはまた、データ・サイエンスセクションに掲載されたリスト構造 http://i.stack.imgur.com/iYau2.png
だが、これは私の黄色のゴム製のアヒルであることのために、今日
を参照するために:修正は、引数を渡すの方法を変更しました'smbinning.genCUSTOM()' -functionに変換します –