首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用expss::cro()编写用户定义的函数

使用expss::cro()编写用户定义的函数
EN

Stack Overflow用户
提问于 2020-05-08 21:12:34
回答 1查看 79关注 0票数 3

我试图编写一个相对简单的用户定义函数来输出跨表,但不太确定为什么它没有运行。

我的测试数据:

代码语言:javascript
复制
fp_within = structure(list(weight_cat.w1 = structure(c(1L, 2L, 2L, 1L, 1L, 
2L, 1L, 1L, 3L, 3L, 3L, 3L, NA, 3L, 3L, 2L, NA, NA, NA, NA), .Label = c("1", 
"2", "3"), label = "Weight (Wave 1)", class = c("labelled", "factor"
)), weight_cat.w2 = structure(c(1L, 2L, 2L, 1L, 1L, 2L, 1L, NA, 
2L, 3L, 3L, 2L, 1L, 3L, 3L, 2L, 2L, 2L, 3L, 1L), .Label = c("1", 
"2", "3"), label = "Weight (Wave 2)", class = c("labelled", "factor"
))), row.names = c(NA, -20L), class = c("tbl_df", "tbl", "data.frame"
))

我的代码:

代码语言:javascript
复制
library(expss)
library(tidyr)

xtable = function(wave1, wave2, name) {

  xtab = fp_within %>%
  tab_cells(wave1) %>% 
  tab_cols(wave2) %>% 
  tab_stat_cases() %>% # tab_stat_cases = counts
  tab_pivot() %>% 
  set_caption(glue("Table showing agreement in {name} across waves (N)"))

  return(xtab)

}

xtable(weight_cat.w1, weight_cat.w2, "weight")

这会抛出一个错误,上面写着..。

代码语言:javascript
复制
Error in eval(expr, envir = e, enclos = baseenv()) : 
  object 'weight_cat.w1' not found

这在函数之外工作,我期望输出如下所示:

代码语言:javascript
复制
Table showing agreement in weight across waves (N)                                                                   
 |                 |              | Weight (Wave 2) |      |      |
 |                 |              |               1 |    2 |    3 |
 | --------------- | ------------ | --------------- | ---- | ---- |
 | Weight (Wave 1) |            1 |            1519 |  309 |    5 |
 |                 |            2 |             300 | 1229 |  299 |
 |                 |            3 |               6 |  278 | 1559 |
 |                 | #Total cases |            1825 | 1816 | 1863 |
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-09 14:06:47

参数weight_cat.w1weight_cat.w2是在讨论tab_*之前进行计算的。因为在您的数据集之外没有这样的变量,所以引发错误。为了避免初步评估,您需要通过使用eval(substitute(...))来特别注意它

代码语言:javascript
复制
xtable = function(wave1, wave2, name) {
    xtab = eval(substitute({
        fp_within %>%
            tab_cells(wave1) %>% 
            tab_cols(wave2) %>% 
            tab_stat_cases() %>% # tab_stat_cases = counts
            tab_pivot()%>% 
            set_caption(glue("Table showing agreement in {name} across waves (N)"))
    })) 

    return(xtab)

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61688170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档