如何在循环内正确解析expss中的(?)mdset?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在循环内正确解析expss中的(?)mdset?相关的知识,希望对你有一定的参考价值。

我是R的新手,我还不了解所有基本概念。任务是产生一个包含多个响应集的合并表。我正在尝试使用expss和循环

这是R中没有循环的代码(工作正常):

#libraries
#blah, blah...

#path
df.path = "C:/dataset.sav"

#dataset load
df = read_sav(df.path)

#table
table_undropped1 = df %>%
  tab_cells(mdset(q20s1i1 %to% q20s1i8)) %>%
  tab_total_row_position("none") %>%
  tab_stat_cpct() %>%
  tab_pivot()

有10个多个响应集,因此我需要以上述方式创建10个表。然后我转置这些表并合并。为了简化代码(并学习新知识),我决定使用循环生成表。但是,没有任何效果。我一直在寻找解决方案,我认为最接近正确的解决方案是:

#this generates a message: '1' not found
for(i in 1:10) 
  assign(paste0("table_undropped",i),1) = df %>%
    tab_cells(mdset(assign(paste0("q20s",i,"i1"),1) %to% assign(paste0("q20s",i,"i8"),1)))
    tab_total_row_position("none") %>%
    tab_stat_cpct() %>%
    tab_pivot()

仍然会导致代码上面描述的错误。

或者,为此将设置一个SPSS宏(仅发布是为了更好地表达问题,因为我必须避免使用SPSS:]]

define macro1 (x = !tokens (1)
/y = !tokens (1))

!do !i = !x !to !y.

mrsets
/mdgroup name = !concat($SET_,!i)
variables = !concat("q20s",!i,"i1") to !concat("q20s",!i,"i8")
value = 1.

ctables
/table !concat($SET_,!i) [colpct.responses.count pct40.0].

!doend
!enddefine.

*** MACRO CALL.
macro1 x = 1 y = 10.

换句话说,我正在寻找R中!concat()的有效替代品。>

我是R的新手,我还不了解所有基本概念。任务是产生一个包含多个响应集的合并表。我正在尝试使用expss库和循环来执行此操作。这是...

答案

%to%不适合参数变量选择。有一组用于参数变量选择和分配的特殊功能。其中之一是mdset_t

for(i in 1:10) 
    table_name = paste0("table_undropped",i) 
    ..$table_name = df %>%
        tab_cells(mdset_t("q20sii1:8")) %>% # expressions in the curly brackets will be evaluated and substituted 
        tab_total_row_position("none") %>%
        tab_stat_cpct() %>%
        tab_pivot()

以上是关于如何在循环内正确解析expss中的(?)mdset?的主要内容,如果未能解决你的问题,请参考以下文章

如何在函数内使用 R 字符向量元素作为字符串和变量?

在R中的嵌套变量中具有行百分比的expss表

如何在 Flutter dart 的列表中的循环内附加数据?

如何防止 R Expss 在输出数据框中将变量名称与行标签混合?

循环以在 JAVA 中的 JSONObject 内获取相同的对象 N 次

如何在节点 js 中正确使用等待/异步与 for 循环