在R的dplyr管道中调用spread生成的新变量执行var.test
解决dplyr管道内调用spread生成变量做方差齐性检验的问题
问题原因
直接在管道中使用var.test(.$A, .$B)会失效,是因为dplyr的%>%默认会把前一步结果传给下一个函数的第一个参数,此时var.test的x参数会被赋值为整个spread后的数据集,而.$A的作用域并非当前管道内的数据集,导致找不到新生成的列。
两种可行解决方法
方法1:用大括号{}包裹,明确引用管道结果
大括号会阻止管道自动传递数据给函数的第一个参数,此时.代表管道前一步的spread结果,可直接访问新列:
# 示例代码 df %>% spread(group, weight) %>% {var.test(.$A, .$B)}
方法2:用with()在数据集环境中执行检验
with()会将传入的数据集作为当前环境,直接引用列名即可:
# 示例代码 df %>% spread(group, weight) %>% with(var.test(A, B))
可选:将检验结果嵌入数据框(适合批量处理)
如果需要把检验结果作为数据框的一部分返回,可结合summarize和list:
# 示例代码 df %>% spread(group, weight) %>% summarize(var_test_result = list(var.test(A, B))) %>% pull(var_test_result) %>% .[[1]]
内容的提问来源于stack exchange,提问作者r_user
相关产品推荐
相关产品推荐

