Hola Erreros! Tengo una función: funcion_prueba(mibase, variable_1, variable_2) que calcula un numero agregado de la variable_2 en función de la variable_1. Estoy intentando aplicar esta función para una base donde tengo 400 variables, de manera que mibase y variable_1 siempre sean las mismas y variable_2 vaya cambiando hasta variable_400.
Mi primer intento lo he hecho con: *For (i in 1:ncol(mibase){* *Vector[i] <- function_prueba(mibase, variable_1, colnames(mibase)[i])* *}* Pero no me funciona porque colnames(mibase)[i] lo interpreta como carácter, es decir como “variable_N” en vez de variable_N. Otro intento ha sido: *Lapply(mibase, function(x) funcion_prueba(mibase, variable_1, x))* Y tampoco funciona, me dice que no encuentra la columna x. ¿Alguien tiene una idea de cómo resolverlo? Más específicamente, estoy intentando aplicar la función gbm_bin, prestada del usuario statcompute de github ( https://github.com/statcompute/MonotonicBinning/blob/master/code/iso_bin.R) *gbm_bin <- function(data, y, x) {* * # INPUT * * # data: input dataframe* * # y : name of Y in the input dataframe with binary 0/1 values* * # x : name of X in the input dataframe with numeric values* * # OUTPUT* * # gbm_bin(df, bad, ltv)* * # $df* * # bin rule freq dist mv_cnt bad_freq bad_rate woe iv ks* * # 01 $X <= 46 81 0.0139 0 3 0.0370 -1.9021 0.0272 1.4298* * # ...SKIPPED...* * # 17 $X > 138 | is.na <http://is.na>($X) 67 0.0115 1 28 0.4179 1.0246 0.0154 0.0000* * # $cuts* * # [1] 46 71 72 73 81 83 90 94 95 100 101 110 112 115 136 138* * yname <- deparse(substitute(y))* * xname <- deparse(substitute(x))* * df1 <- subset(data, !is.na <http://is.na>(data[[xname]]) & data[[yname]] %in% c(0, 1), select = c(xname, yname))* * df2 <- data.frame(y = df1[[yname]], x = df1[[xname]], x2 = df1[[xname]])* * spcor <- cor(df2[, 2], df2[, 1], method = "spearman", use = "complete.obs")* * mdl <- gbm::gbm(y ~ x + x2, distribution = "bernoulli", data = df2, var.monotone = c(spcor / abs(spcor), spcor / abs(spcor)), * * bag.fraction = 1, n.minobsinnode = round(nrow(df2) / 100))* * df3 <- data.frame(y = df2$y, x = df2$x, yhat = gbm::predict.gbm(mdl, n.trees = mdl$n.trees, type = "response"))* * df4 <- Reduce(rbind, * * lapply(split(df3, df3$yhat), * * function(x) data.frame(maxx = max(x$x), * * yavg = mean(x$y),* * yhat = round(mean(x$yhat), 8))))* * df5 <- df4[order(df4$maxx), ]* * h <- ifelse(df5[["yavg"]][1] %in% c(0, 1), 2, 1)* * t <- ifelse(df5[["yavg"]][nrow(df5)] %in% c(0, 1), 2, 1)* * cuts <- df5$maxx[h:max(h, (nrow(df5) - t))]* * return(list(df = manual_bin(data, yname, xname, cuts = cuts), * * cuts = cuts)) * *}* y mi código es *for(i in 1:(ncol(mibase)-1)){ sum(gbm_bin(mibase, etiqueta, colnames(mibase)[i])$df$iv)}y* *lapply(mibase, function(x) sum(gbm_bin(mibase, etiqueta, x)$df$iv))* Gracias de antemano!! Diego [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es