无法分配给不存在的列——使用 ARTool 包

Can't assign to columns that don't exist -- Using ARTool package

我正在使用 ARTool 包生成 post-hoc 测试,以查看因素组合之间的差异,但收到以下错误

Error: Can't assign to columns that don't exist. x Column grade_levelbooks_quantile doesn't exist. Run rlang::last_error() to see where the error occurred.

回溯后的注释如下:

rlang::last_error()
<error/vctrs_error_subscript_oob>
Can't assign to columns that don't exist.
x Column `grade_levelbooks_quantile` doesn't exist.
Backtrace:
  1. emmeans::contrast(...)
  4. ARTool::artlm.con(m.art, "grade_level:books_quantile")
  5. ARTool:::artlm.con.internal(...)
  6. ARTool:::generate.art.concatenated.df(m.f.parsed, df, f.parsed)
  8. tibble:::`[[<-.tbl_df`(...)
  9. tibble:::vectbl_as_new_col_index(j, x, value, j_arg, value_arg)
 10. tibble:::vectbl_as_col_location(...)
 13. vctrs::vec_as_location(j, n, names)
 15. vctrs:::stop_subscript_oob(...)
 16. vctrs:::stop_subscript(...)
Run `rlang::last_trace()` to see the full context. 

我使用的数据的代码和描述(由于敏感性问题,我简化了数据):

library(ARTool)
m.art = art(percentile_rank ~ grade_level + books_quantile + grade_level*books_quantile,
            data = read1)
art.con(m.art, "grade_level:books_quantile")

str(read1)
tibble [20,902 x 21] (S3: tbl_df/tbl/data.frame)
 $ school_key               : chr [1:20902] "309" "296" "198" "189" ...
 $ school_year_key          : chr [1:20902] "2019" "2019" "2019" "2019" ...
 $ grade_level              : Factor w/ 9 levels "K","1","2","3",..: 1 3 3 3 3 3 3 3 3 4 ...
 $ percentile_rank          : num [1:20902] 43 97 84 23 27 5 84 6 1 21 ...
 $ discipline               : chr [1:20902] "Reading" "Reading" "Reading" "Reading" ...
 $ books_quantile           : Factor w/ 3 levels "Q4","IQR","Q1": 2 2 2 3 3 2 2 2 2 3 ...

我不是很确定,但我敢打赌这就是您所需要的:

art.con(m.art, c("grade_level", "books_quantile"))

我认为这是 tibbles 的问题。 使用来自

的数据
data(goggles, package="WRS2") 

那么这些都有效

m.art <- art(attractiveness ~ alcohol * gender, data = goggles) 
art.con(m.art, "alcohol:gender") 
art.con(m.art, ~alcohol*gender). 

但是如果数据是 tibble,像以前一样重新运行会出现类似的错误。

goggles <- tibble::as_tibble(goggles) 
m.art <- art(attractiveness ~ alcohol * gender, data = goggles) 
art.con(m.art, "alcohol:gender") 
art.con(m.art, ~alcohol*gender) 

所以解决方案是确保您的数据是 data.frame