Html R:expss包:do.call(data.frame,c(x,alis))中出错:变量名限制为10000字节

Html R:expss包:do.call(data.frame,c(x,alis))中出错:变量名限制为10000字节,html,r,automation,non-standard-evaluation,expss,Html,R,Automation,Non Standard Evaluation,Expss,我使用expss包在R中定义了一些表函数来自动制表。 我的一个表格想要显示类别的案例或百分比,然后是平均值。平均值可以基于同一类别变量,也可以定义为另一个变量。 总的来说,代码工作得很完美。对于一些变量,尽管我一直在纠结错误代码“do.call(data.frame,c(x,alis))中的错误:变量名限制为10000字节” 此表的代码 Table2 = function (Q, banner=banner, caption , Q.mean, ddata=d, questlab=dques

我使用expss包在R中定义了一些表函数来自动制表。 我的一个表格想要显示类别的案例或百分比,然后是平均值。平均值可以基于同一类别变量,也可以定义为另一个变量。 总的来说,代码工作得很完美。对于一些变量,尽管我一直在纠结错误代码“do.call(data.frame,c(x,alis))中的错误:变量名限制为10000字节”

此表的代码

  Table2 = function (Q, banner=banner, caption , Q.mean, ddata=d, questlab=dquest, mis.val=999) {
  x_totaln<-eval(substitute(x),ddata)
  x_totaln[is.na(eval(substitute(Q),ddata))]<-NA
  if(missing(Q.mean))
  {Q_mean<-eval(substitute(Q),ddata)}
  else 
  {Q_mean<-eval(substitute(Q.mean),ddata)}
  Q_mean[Q_mean==mis.val]<-NA
  if(missing(caption))
  {caption<-eval(substitute(var_lab(Q_mean)),questlab)}
  eval.parent(substitute(
    { 
      banner %>%
        tab_cells (x_totaln) %>%
        tab_stat_cases(total_row_position = c("none"),label = 'N') %>%
        tab_cells (Q) %>%
        tab_stat_cases(total_row_position = c("none"),label = 'N') %>%
        tab_stat_cpct(total_row_position = c("none"), label = '%') %>%
        tab_cells (Q_mean) %>%
        tab_stat_mean(label = 'Mean') %>%
        tab_pivot (stat_position = "inside_rows") %>%  
        drop_c ()  %>%
        custom_format2()  %>%
        set_caption(caption)
    }
  ))
}

对于某些变量,尽管它会生成错误代码

Table2(age_cat,Q.mean=age,caption="Your age at the start of the programme?")
 Error in do.call(data.frame, c(x, alis)) : 
  variable names are limited to 10000 bytes 
19.
do.call(data.frame, c(x, alis)) 

虽然在代码中包含变量,但仍然可以完美地工作

Table2test = function () {
  x_totaln<-eval(substitute(x),d)
  x_totaln[is.na(eval(substitute(age_cat),d))]<-NA
  Q_mean<-eval(substitute(age),d)
  Q_mean[Q_mean==999]<-NA
      banner %>%
        tab_cells (x_totaln) %>%
        tab_stat_cases(total_row_position = c("none"),label = 'N') %>%
        tab_cells (age_cat) %>%
        tab_stat_cases(total_row_position = c("none"),label = 'N') %>%
        tab_stat_cpct(total_row_position = c("none"), label = '%') %>%
        tab_cells (Q_mean) %>%
        tab_stat_mean(label = 'Mean') %>%
        tab_pivot (stat_position = "inside_rows") %>%  
        drop_c ()  %>%
        custom_format2()  %>%
        set_caption("Your age at the start of the programme?")
  
}
Table2test=函数(){
x_总计n%
tab统计案例(总计行位置=c(“无”),label='N')%>%
tab_stat_cpct(总行位置=c(“无”),label='%')%>%
tab_单元格(Q_平均值)%>%
选项卡统计平均值(标签='平均值')%>%
制表符轴(stat\u position=“inside\u rows”)%>%
下降c()%>%
自定义格式2()%>%
设置标题(“您在课程开始时的年龄?”)
}

有什么建议吗?或者有人知道为什么会发生错误吗


感谢当您
替换
变量时,在某些情况下,它们被表示为结构。在这种情况下,表达式中没有变量名,只有值:tab_单元格(结构(c(22,23,22,23,…许多数字)))。我们尝试在结果表中使用这个长表示作为名称。但是R对名称的长度有限制。在这里,函数失败了。解决方案非常简单-我们将始终设置变量标签,并将其用作名称。因此,以下代码运行时不会出现任何错误:

Table2 = function (Q, banner=banner, caption , Q.mean, ddata=d, questlab=dquest, mis.val=999) {
    x_totaln<-eval(substitute(x),ddata)
    x_totaln[is.na(eval(substitute(Q),ddata))]<-NA
    var_lab(x_totaln) = "Total" # add label for total
    if(missing(Q.mean))
    {Q_mean<-eval(substitute(Q),ddata)}
    else 
    {Q_mean<-eval(substitute(Q.mean),ddata)}
    Q_mean[Q_mean==mis.val]<-NA
    if(missing(caption))
    {caption<-eval(substitute(var_lab(Q_mean)),questlab)}
    eval.parent(substitute(
        { 
            banner %>%
                tab_cells (x_totaln) %>%
                tab_stat_cases(total_row_position = c("none"),label = 'N') %>%
                tab_cells (Q) %>%
                tab_stat_cases(total_row_position = c("none"),label = 'N') %>%
                tab_stat_cpct(total_row_position = c("none"), label = '%') %>%
                tab_cells ("|" = Q_mean) %>% # "|" suppress label for mean
                tab_stat_mean(label = 'Mean') %>%
                tab_pivot (stat_position = "inside_rows") %>%  
                drop_c ()  %>%
                custom_format2()  %>%
                set_caption(caption)
        }
    ))
}
Table2=函数(Q,banner=banner,caption,Q.mean,ddata=d,questlab=dquest,mis.val=999){
x_总计n%
tab|单元格(“|”=Q|u平均值)%>%#“|”抑制平均值的标签
选项卡统计平均值(标签='平均值')%>%
制表符轴(stat\u position=“inside\u rows”)%>%
下降c()%>%
自定义格式2()%>%
设置标题(标题)
}
))
}

您能为您的数据样本提供导致错误的变量吗?这个变量可能没有标签吗?de数据有标签,我如何最好地共享?wich格式?rds格式-
saveRDS(“sample.rds”)
。你可以与google drive/dropbox等分享,也可以通过gmail.com向gdemin发送电子邮件
Table2 = function (Q, banner=banner, caption , Q.mean, ddata=d, questlab=dquest, mis.val=999) {
    x_totaln<-eval(substitute(x),ddata)
    x_totaln[is.na(eval(substitute(Q),ddata))]<-NA
    var_lab(x_totaln) = "Total" # add label for total
    if(missing(Q.mean))
    {Q_mean<-eval(substitute(Q),ddata)}
    else 
    {Q_mean<-eval(substitute(Q.mean),ddata)}
    Q_mean[Q_mean==mis.val]<-NA
    if(missing(caption))
    {caption<-eval(substitute(var_lab(Q_mean)),questlab)}
    eval.parent(substitute(
        { 
            banner %>%
                tab_cells (x_totaln) %>%
                tab_stat_cases(total_row_position = c("none"),label = 'N') %>%
                tab_cells (Q) %>%
                tab_stat_cases(total_row_position = c("none"),label = 'N') %>%
                tab_stat_cpct(total_row_position = c("none"), label = '%') %>%
                tab_cells ("|" = Q_mean) %>% # "|" suppress label for mean
                tab_stat_mean(label = 'Mean') %>%
                tab_pivot (stat_position = "inside_rows") %>%  
                drop_c ()  %>%
                custom_format2()  %>%
                set_caption(caption)
        }
    ))
}