Ir al contenido principal

Usar el autograder de DataCamp para enseñar R

Descubre cómo el autograder de DataCamp ayuda a enseñar R y cómo sacar partido a las funciones de testwhat.
Actualizado 17 sept 2026  · 6 min leer

Explorar con IA

ChatGPTClaudePerplexity

El feedback inmediato y personalizado ha sido clave en la experiencia de aprendizaje de DataCamp desde que lanzamos los primeros cursos. Si los estudiantes envían código con un error, se les indica dónde está el fallo y cómo corregirlo. Puedes probarlo en nuestro curso gratuito Introduction to R. La siguiente captura es de nuestro curso Intermediate R.

Para comprobar los envíos y generar feedback, cada ejercicio de DataCamp incluye una prueba de corrección de envíos, o SCT (Submission Correctness Test).

El SCT es un script de pruebas personalizadas que evalúa el código que envían los estudiantes y el resultado y las variables que crean con su código. Para cada lenguaje que enseñamos en DataCamp, hemos creado un paquete open source correspondiente que permite verificar fácilmente todos estos elementos de un envío. En los ejercicios de R, este paquete se llama testwhat. Con los años, hemos añadido muchas funciones para:

  • comprobar la asignación de variables
  • comprobar llamadas a funciones y sus resultados
  • comprobar sentencias if, bucles for y bucles while
  • comprobar la definición de funciones
  • comprobar si se cargan los paquetes adecuados
  • comprobar la salida generada por el estudiante
  • comprobar llamadas de dibujo con ggplot y ggvis
  • ...

Cuando estas funciones de comprobación detectan un error, generan automáticamente un mensaje de feedback claro que señala el fallo al estudiante. También puedes definir mensajes de feedback personalizados que sustituyan a los generados automáticamente.

Históricamente, testwhat estaba muy ligado a nuestro backend propietario que ejecuta código R en los servidores de DataCamp. Aunque testwhat siempre ha sido open source, sin ese backend personalizado no funcionaba bien y solo podía usarse en el contexto de DataCamp. Hoy, sin embargo, testwhat puede usarse de forma independiente y también admite otros casos de uso. Puedes aprovechar todo lo que ofrece testwhat para evaluar los envíos de tus estudiantes, incluso si tu formato de enseñanza es muy diferente al de DataCamp. Puedes instalar el paquete desde GitHub:

library(remotes) # devtools works fine too
install_github('datacamp/testwhat')

Como demo rápida, imagina que pides a los estudiantes crear una variable x igual a 5. Una versión en cadena de la solución ideal sería algo así:

solution_code <- 'x <- 5'

Ahora supón que el estudiante envía un script donde x se define incorrectamente como un vector de dos valores, que podría codificarse así:

student_code <- 'x <- c(4, 5)'

testwhat incluye una función llamada setup_state() que ejecuta el envío del estudiante y el script de solución en entornos separados y captura la salida y los errores que generó el código del estudiante. Toda esta información se guarda en el denominado estado del ejercicio, al que puedes acceder con ex():

library(testwhat)
setup_state(stu_code = student_code,
            sol_code = solution_code)
ex()
## <RootState>

Este estado del ejercicio puede pasarse a la amplia gama de funciones de comprobación de testwhat usando la sintaxis de tuberías de magrittr. Para comprobar si el estudiante definió una variable x, puedes usar check_object():

ex() %>% check_object('x')
## <ObjectState>

Este código funciona, porque el estudiante sí definió una variable x. Para continuar y comprobar si la variable x está definida correctamente, puedes usar check_equal():

ex() %>% check_object('x') %>% check_equal()
## Error in check_that(is_equal(student_obj, solution_obj, eq_condition), : The contents of the variable `x` aren't correct. It has length 2, while it should have length 1.

Esto falla. check_equal() detecta que el valor de x en el entorno del estudiante (un vector) no coincide con el valor de x en el entorno de la solución (un único número). Fíjate en que el mensaje de error incluye una explicación legible que describe el fallo.

El ejemplo anterior fue interactivo: creas un estado y después vas encadenando funciones de comprobación. A un nivel superior, puedes usar run_until_fail() para envolver el código de comprobación. Ejecutará tu batería de pruebas hasta que falle:

library(testwhat)
setup_state(stu_code = 'x <- 4',
            sol_code = 'x <- 5')
res <- run_until_fail({
  ex() %>% check_object('x') %>% check_equal()
})
res$correct
## [1] FALSE
res$message
## [1] "The contents of the variable `x` aren't correct."

Este enfoque básico de construir un estado del ejercicio con el envío del estudiante y la solución y, después, usar run_until_fail() para ejecutar una batería de pruebas, se puede integrar fácilmente en un flujo de autocorrección que se adapte a tus necesidades. Imagina que tus estudiantes han entregado sus tareas como un script de R que has descargado a tu ordenador en la carpeta submissions (hemos precargado la carpeta con algunos datos aleatorios). Tenemos varios scripts de R en la carpeta submissions. Cada script contiene el envío de un estudiante:

dir('submissions')
##  [1] "student_a.R" "student_b.R" "student_c.R" "student_d.R" "student_e.R"
##  [6] "student_f.R" "student_g.R" "student_h.R" "student_i.R" "student_j.R"
readLines('submissions/student_a.R')
## [1] "x <- 4"
readLines('submissions/student_b.R')
## [1] "x <- 5"

Ahora podemos iterar por todos estos envíos y generar un data.frame que indique, por estudiante, si el envío es correcto o no:

library(testwhat)

folder_name <- 'submissions'
all_files <- file.path(folder_name, dir(folder_name))
student_results <- sapply(all_files, function(file) {
  student_code <- readLines(file)
  setup_state(sol_code = 'x <- 5',
              stu_code = student_code)
  res <- run_until_fail({
    ex() %>% check_object('x') %>% check_equal()
  })
  res$correct
})
results_df <- data.frame(name = all_files, correct = student_results,
                         row.names = NULL, stringsAsFactors = FALSE)
results_df
##                       name correct
## 1  submissions/student_a.R   FALSE
## 2  submissions/student_b.R    TRUE
## 3  submissions/student_c.R    TRUE
## 4  submissions/student_d.R    TRUE
## 5  submissions/student_e.R   FALSE
## 6  submissions/student_f.R    TRUE
## 7  submissions/student_g.R   FALSE
## 8  submissions/student_h.R   FALSE
## 9  submissions/student_i.R    TRUE
## 10 submissions/student_j.R    TRUE

Esta pequeña demo aún es algo rudimentaria, pero espero que sirva para mostrar la idea: con un poco de R para construir las entradas adecuadas para setup_state(), puedes poner en marcha todas las funciones de comprobación de testwhat. Las pruebas que definas en run_until_fail() validarán el trabajo del estudiante y, además, generarán un feedback útil que le indique dónde se está equivocando.

Para saber más sobre testwhat, visita el repositorio en GitHub o la documentación del paquete, generada con pkgdown. Incluye viñetas que explican cómo usar ciertas funciones de comprobación y una referencia de funciones con todos los argumentos disponibles. No dudes en abrir issues en GitHub o escribirnos a content-engineering@datacamp.com. ¡Nos encanta recibir feedback! ¡Feliz enseñanza!

Este blog se generó con RMarkdown. Puedes encontrar el código fuente aquí.

Temas
R
Relacionado

blog

¿Qué es R? Introducción a la potencia del cálculo estadístico

Aprende todo lo que necesitas saber sobre el lenguaje de programación R y descubre por qué es el lenguaje más utilizado en ciencia de datos.
Summer Worsley's photo

Summer Worsley

15 min

R Project

blog

Las 8 mejores ideas de proyectos R para 2026

Descubre qué es R y todas las ventajas de utilizarlo, con ejemplos e ideas nuevas para un proyecto.
Elena Kosourova's photo

Elena Kosourova

14 min

Tutorial

Tutorial sobre el uso de funciones en R

Descubra qué son las funciones R, los diferentes tipos de funciones en R y cómo crear sus propias funciones en R.
Javier Canales Luna's photo

Javier Canales Luna

11 min

Tutorial

Tutorial de RStudio

Descubra qué es RStudio y cómo instalarlo y empezar a utilizarlo
Elena Kosourova 's photo

Elena Kosourova

12 min

Tutorial

Tutorial de K-Means Clustering en R

Aprenda qué es k-means y descubra por qué es uno de los algoritmos de agrupación más utilizados en la ciencia de datos.
Eugenia Anello's photo

Eugenia Anello

8 min

Tutorial

Tutorial de tablas de contingencia en R

En este tutorial, aprenderás a crear tablas de contingencia y a probar y cuantificar las relaciones visibles en ellas.
Łukasz Deryło's photo

Łukasz Deryło

10 min

Ver MásVer Más