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.

Función después de instalar el paquete presenta un error, pero no en el entorno global de R.

He creado un paquete, una de las funciones se muestra a continuación:

tab_std <- function(data, var, footer, numdig = 0, sorted = FALSE, masking, ...){
  var1 <- rlang::parse_expr(var)
  expss::var_lab(data[[var]]) <- ""
  if (sorted) {
    if(is.list(lst) & length(lst) == 0) {tab1 <- expss::cro_cpct(data[[var]]) %>%
    tab_sort_desc
    } else {
      tab1 <- expss::cro_cpct(data[[var]],lst) %>%
    tab_sort_desc
    }
  } else {
    if(is.list(lst) & length(lst) == 0) {tab1 <- expss::cro_cpct(data[[var1]])
    } else {
      tab1 <- expss::cro_cpct(data[[var]],lst)
    }
  }
  tab1 <- as.data.frame(tab1)
  tab1[which(tab1[,1]=="#Total cases"),1] <- Nstring
  setnames(tab1,"row_labels"," ")
  tab1[is.na(tab1)] <- 0
  tab1 <- tab1 %>%
    mutate(
      across(
        .cols = where(is.numeric),
        .fns = ~ round_half_up(.x,digits = numdig)))
  if (masking == TRUE) {
    mask_indices <- sapply(tab1, function(x) x[length(x)]< freq_mask) %>%
    which()
    tab1[-nrow(tab1), mask_indices] <- "--"
    tab1[-nrow(tab1), -c(1)] <- sapply(tab1[-nrow(tab1), -c(1)],function(x) ifelse(x=="--","--",paste(format(x,nsmall = numdig),"%",sep = "" )))

  }else{
    tab1[-nrow(tab1), -c(1)] <- sapply(tab1[-nrow(tab1), -c(1)],function(x) paste(format(x,nsmall = numdig),"%",sep = "" ))
  }

  if (Nstring_Position == "Top") {
    i <- match(Nstring, tab1[,1])
    tab1 <- rbind(tab1[i,], tab1[-i,])}
  if(missing(footer)){tab2 <- tab1 %>%
    flextable() %>%
    mercer_style()}
  else{tab2 <- tab1 %>%
    flextable() %>%
    add_footer_lines(footer) %>%
    mercer_style()}
  tab2
}

Esta función, después de instalar el paquete, arroja el siguiente error:
Error in rep.default(data, nrows) : attempt to replicate an object of type 'closure'

El error se encuentra en este paso:

expss::cro_cpct(data[[var]], lst)

Pero si ejecuto esta función en el entorno global, funciona correctamente.
Esta función funciona bien en otro caso, solo cuando la incluyo en el paquete se produce el error. ¿Hay algo que me esté perdiendo en el paquete o en la función?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar relacionado con el hecho de que el argumento lst no está definido en la lista de parámetros de la función, pero se utiliza en las declaraciones if posteriores. El mensaje de error también sugiere que podría haber un problema con la función rep.default(), que no se utiliza explícitamente en la función proporcionada. Es posible que este error esté relacionado con problemas de ámbito de variables o conflictos de nombres en el entorno del paquete.

    Para diagnosticar el problema, los siguientes pasos podrían ser útiles:

    1. Verifique si las dependencias del paquete y las versiones necesarias están correctamente definidas en el archivo DESCRIPTION del paquete y asegúrese de que estén instaladas.
    2. Verifique si el argumento lst está correctamente definido en la lista de parámetros de la función tab_std(), y asegúrese de que se carguen todas las dependencias de la función expss::cro_cpct() en la función o en el script de carga del paquete.
    3. Verifique si la función cro_cpct() del paquete expss se carga correctamente en la función o en el script de carga del paquete.
    4. Verifique si hay conflictos de nombres o problemas de ámbito que puedan causar que se produzca el error rep.default(). Esto se puede hacer intentando reproducir el error en una sesión nueva de R sin cargar otros paquetes, o utilizando herramientas como los paquetes conflicted o envir para diagnosticar conflictos de nombres.

    Una vez identificado el problema específico que causa el error, se pueden realizar cambios apropiados en el código del paquete o de la función para resolver el problema.

Comments are closed.