es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Creación de una clase específica para el paquete y datos simulados para esta clase específica en un paquete R.

Quiero crear un conjunto de datos falsos para mi paquete. He creado clases S4 en mi paquete, a través de una función que defino y que debe ser ejecutada, por ejemplo.

#' @title Inicialización de Clase
#' @description Función para definir clases específicas del paquete dentro del mismo
#' @importFrom methods setClass

init.classes <- function(){

   class_cache <- new.env(parent = emptyenv())
   setClass("Clima", 
       slots=list(
       inicio="character",
       fin="character",
       temperatura="matrix",
       radiacion_corta="matrix",
       radiacion_larga="matrix",
       precipitacion="matrix"),
       where = class_cache
     )
}

Luego, creo una clase idéntica en mi directorio de datos y genero un objeto de esta clase con new(..) y lo guardo en el paquete con:

usethis::use_data(ejemplo.clima, overwrite = TRUE, internal=F)

Sin embargo, siento que esta puede no ser la mejor solución. ¿Podría alguien ayudarme con eso? Tengo dos preguntas que, creo, están relacionadas entre sí.
1) ¿Cómo puedo crear una clase específica del paquete?
2) ¿Cómo puedo crear datos falsos para esta clase específica del paquete para que un usuario de R pueda usarlos, por ejemplo, siguiendo una Viñeta “Primeros pasos”, …?

Tags:  ,

Answer

  1. Avatar for davy.ai

    1) Para crear una clase específica del paquete, puedes definir la clase utilizando la función setClass() dentro de una función que se incluye en tu paquete. Aquí tienes un ejemplo:

    myclass_initialize <- function(){
      setClass("MyClass", 
               slots = list(
                 slot1 = "numeric",
                 slot2 = "character"
               ),
               prototype = list(
                 slot1 = NA_real_,
                 slot2 = NA_character_
               )
      )
    }
    

    Este código define una nueva clase “MyClass” con dos slots, “slot1” de tipo numérico y “slot2” de tipo carácter.

    2) Para crear datos ficticios para esta clase específica del paquete, puedes crear un objeto de esta clase utilizando la función new() y luego guardarlo como un objeto de datos R en el directorio “data/” de tu paquete utilizando la función usethis::use_data(). Aquí tienes un ejemplo:

    myclass_mockdata <- function(){
      obj <- new("MyClass", slot1 = 1, slot2 = "a")
      usethis::use_data(obj, "myclass_example", overwrite = TRUE, internal = FALSE)
    }
    

    Este código crea un objeto de la clase “MyClass” con “slot1” establecido en 1 y “slot2” establecido en “a”. Luego guarda este objeto como “myclass_example” en el directorio “data/” de tu paquete.

    Ahora, tus usuarios pueden acceder a estos datos ficticios utilizando la función data() o a través de un vignette.

    Nota: asegúrate de documentar tu clase y sus slots, así como los datos ficticios, utilizando la sintaxis de Roxygen2, para que los usuarios puedan entender la estructura y el propósito de la clase y los datos.

Comments are closed.