Ejecutando un bucle general y una función if para calcular las medias de las columnas.
Si ejecuto este código con mis datos, obtengo la salida correcta:
my_mean <- function(datos_simulados){
if(is.numeric(datos_simulados)){
return(sum(datos_simulados)/length(datos_simulados))
}else{
return('Datos no numéricos')
}
}
for (i in colnames(datos_simulados)){
cat(paste(colnames(datos_simulados[i]), "Media:", my_mean(datos_simulados[[i]]), "\n"))
}
Esta es la salida:
total_cost Media: 1897.21529700626
product_line Media: Datos no numéricos
day Media: Datos no numéricos
calander_week Media: 25.5
quantity Media: 113.759646705788
Pero si generalizo la fórmula (como tengo que hacer para mi tarea), ejecuto el siguiente código:
means_function <- function(datos_entrada){
for(i in colnames(datos_entrada)){
if(is.numeric(datos_entrada)){
cat(paste(colnames(datos_entrada[i]), "Media:", mean(datos_entrada[i]),"\n"))
}else{
cat(paste(colnames(datos_entrada[i]), "Media:", 'Datos no numéricos', "\n"))
}
}
}
means_function(datos_simulados)
Y luego obtengo la siguiente salida:
total_cost Media: Datos no numéricos
product_line Media: Datos no numéricos
day Media: Datos no numéricos
calander_week Media: Datos no numéricos
quantity Media: Datos no numéricos
¿Alguien puede decirme qué estoy haciendo mal? Tengo que usar el bucle for, la función if y la función means.
davy.ai
El problema con la función generalizada
means_function
es queis.numeric(input_data)
verifica si toda una columna es numérica, lo cual no es cierto. En su lugar, se debería verificar si cada valor individual en la columna es numérico usandois.numeric(input_data[[i]])
.Aquí está el código corregido de
means_function
:Esto debería darte la salida deseada donde se calcula la media para las columnas numéricas y se imprime “Datos no numéricos” para las columnas no numéricas.