安装包后的功能给出错误但不是在 R 的全局环境中
Function after installing the package giving error but not in the global environment in R
我创建了一个包,其中一个功能如下:
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
}
这个函数在安装包后出现以下错误:
显示在新 Window
rep.default(data, nrows) 中的错误:尝试复制 'closure'
类型的对象
错误在这一步:
expss::cro_cpct(data[[var]], lst)
但是如果我 运行 这个函数在全局环境中工作正常。
此功能运行良好,否则只有当我将其包含在包中时才会发生错误。包或函数中是否缺少任何内容?
我在你函数的参数中没有看到 'lst'。而且我知道 'dplyr' 包中有 'lst' 函数。错误消息说 'cro_cpct' 试图复制函数(“闭包”)。也许,您忘记了将 'lst' 添加到函数参数中。
我创建了一个包,其中一个功能如下:
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
}
这个函数在安装包后出现以下错误: 显示在新 Window rep.default(data, nrows) 中的错误:尝试复制 'closure'
类型的对象错误在这一步:
expss::cro_cpct(data[[var]], lst)
但是如果我 运行 这个函数在全局环境中工作正常。 此功能运行良好,否则只有当我将其包含在包中时才会发生错误。包或函数中是否缺少任何内容?
我在你函数的参数中没有看到 'lst'。而且我知道 'dplyr' 包中有 'lst' 函数。错误消息说 'cro_cpct' 试图复制函数(“闭包”)。也许,您忘记了将 'lst' 添加到函数参数中。