【问题标题】:Function after installing the package giving error but not in the global environment in R安装包后出现错误但不在R中的全局环境中的功能
【发布时间】:2022-01-07 06:15:20
【问题描述】:

我已经创建了一个包,其中一个功能如下:

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
}

安装包后这个函数给出以下错误: 在新窗口中显示 rep.default(data, nrows) 中的错误:尝试复制“闭包”类型的对象

错误在这一步:

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

但是如果我在全局环境中运行这个函数,它就可以正常工作。 此功能运行良好,否则仅当我将其包含在包中时才会发生错误。我在包或函数中缺少什么吗?

【问题讨论】:

    标签: r function package


    【解决方案1】:

    我在你的函数的参数中没有看到“lst”。而且我知道“dplyr”包中有“lst”功能。并且错误消息说“cro_cpct”试图复制函数(“闭包”)。也许,您忘记在函数参数中添加“lst”。

    【讨论】:

    • lst 是我在全局环境中定义的变量。我将它添加为函数的参数,几乎没有变化,它现在正在工作。谢谢
    猜你喜欢
    • 2016-05-28
    • 2015-11-10
    • 2022-01-22
    • 2020-07-15
    • 2018-04-24
    • 2021-08-05
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多