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.

Error de envío del paquete R relacionado con set.seed()

Recientemente envié un paquete a CRAN que pasó todas las comprobaciones automáticas, pero no pasó las comprobaciones manuales. Uno de los errores fue el siguiente:

Favor de no establecer una semilla a un número específico dentro de una función.

Favor de no modificar el .GlobalEnv. Esto no está permitido por las políticas de CRAN.

Creo que las líneas de código a las que se refieren estos comentarios son las siguientes:

if(simul == TRUE){

    set.seed(42)

}

w <- matrix(data = rbinom(n = p, size = 1, prob = 0.5), ncol = 1)

beta <- w*beta-(1-w)*beta

s <- round((1-sparsity)*p)                   

toReplace <- sample(p, size = s)

beta <- replace(beta, list = toReplace, values = 0)


# Generar la matriz de series de indicadores aleatorios columnas p. 

X <- matrix(data = rnorm ((n_l*m) * p, mean = mean_X, sd = sd_X), ncol = p, nrow = n_l*m)


if(simul == TRUE){

    rm(.Random.seed, envir = globalenv())

}

Básicamente, estoy permitiendo que la función incluya una opción de simulaciones “simul”, de manera que cuando se establece en “TRUE”, una matriz “X” y un vector de coeficientes “beta” permanecen fijos. Elimino la semilla al final de este segmento (líneas finales), ya que el resto del código contiene variables que deben cambiar en cada iteración de la simulación. Sin embargo, como se menciona en la retroalimentación de CRAN, esto no está permitido. ¿Cuál es una forma alternativa de abordar esto? No puedo establecer un vector “beta” fijo o una matriz “X” cuando “simul” es “TRUE”, ya que las dimensiones de estos son parámetros de entrada de la función y, por lo tanto, varían dependiendo de las preferencias del investigador.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una forma alternativa de abordar esto es crear una función separada específicamente para generar la matriz y el vector fijos (llamémosla “fixed_gen”), y llamarla dentro de la función principal cuando “simul” está establecido en “TRUE”. De esta manera, la semilla se puede establecer dentro de la función “fixed_gen” sin afectar la capacidad de la función principal de variar las otras variables en cada iteración.

    Aquí hay un ejemplo de implementación:

    “`{r}
    fixed_gen <- function(seed, n_l, m, p, mean_X, sd_X, sparsity) {
    set.seed(seed)
    w <- matrix(data = rbinom(n = p, size = 1, prob = 0.5), ncol = 1)
    beta <- w2 – 1
    s <- round((1-sparsity)
    p)
    toReplace <- sample(p, size = s)
    beta <- replace(beta, list = toReplace, values = 0)
    X <- matrix(data = rnorm((n_lm)p, mean = mean_X, sd = sd_X), ncol = p, nrow = n_l*m)
    return(list(beta = beta, X = X))
    }

    main_function <- function(n_l, m, p, mean_X, sd_X, sparsity, simul = FALSE, fixed_seed = NULL) {
    if (simul) {
    if (is.null(fixed_seed)) {
    stop(“Por favor, especifique una semilla fija cuando simul is igual a TRUE.”)
    }
    fixed_data <- fixed_gen(fixed_seed, n_l, m, p, mean_X, sd_X, sparsity)
    beta <- fixed_data$beta
    X <- fixed_data$X
    } else {
    beta <- matrix(data = rbinom(n = p, size = 1, prob = 0.5), ncol = 1)
    s <- round((1-sparsity)p)
    toReplace <- sample(p, size = s)
    beta <- replace(beta, list = toReplace, values = 0)
    X <- matrix(data = rnorm((n_l
    m)p, mean = mean_X, sd = sd_X), ncol = p, nrow = n_lm)
    }
    # resto del código aquí..
    }
    “`

    En esta implementación, la función “fixed_gen” genera un beta y un X fijos, y los devuelve en una lista. La función principal verifica si “simul” está establecido en “TRUE” y, de ser así, llama a “fixed_gen” con la semilla especificada (en “fixed_seed”) para generar los datos fijos. De lo contrario, genera el beta y el X de manera normal. El resto de la función puede proceder como de costumbre.

    Esta implementación permite tener un beta y X fijos cuando se desee, evitando el uso de la semilla dentro de la función principal.

Comments are closed.