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?
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 declaracionesif
posteriores. El mensaje de error también sugiere que podría haber un problema con la funciónrep.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:
lst
está correctamente definido en la lista de parámetros de la funcióntab_std()
, y asegúrese de que se carguen todas las dependencias de la funciónexpss::cro_cpct()
en la función o en el script de carga del paquete.cro_cpct()
del paqueteexpss
se carga correctamente en la función o en el script de carga del paquete.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 paquetesconflicted
oenvir
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.