R语言as.coded.data函数不接受变量替代数值问题问询
问题解答
这不是as.coded.data函数的固有局限性,问题根源是公式的环境解析规则导致的。rsm包的as.coded.data解析公式时,默认仅会在传入的数据集内部搜索变量,你定义的T1MID、T1HIGH这类参数属于SPLOT函数的内部环境变量,不在传入的数据集范围内,所以会触发变量找不到的报错。直接替换为固定数值时,常量不需要匹配环境变量,因此可以正常运行。
修复方案
你可以选择以下任意一种方法解决问题:
- 方法1:将需要用到的函数参数作为常量列提前写入数据集
# 把编码需要用到的参数全部存入数据集 PROJ_DATA$T1LOW <- T1LOW PROJ_DATA$T1HIGH <- T1HIGH PROJ_DATA$T1MID <- T1MID PROJ_DATA$T2LOW <- T2LOW PROJ_DATA$T2HIGH <- T2HIGH PROJ_DATA$T2MID <- T2MID PROJ_DATA$T3LOW <- T3LOW PROJ_DATA$T3HIGH <- T3HIGH PROJ_DATA$T3MID <- T3MID # 再调用as.coded.data即可正常运行,同时注意修正原代码的两处笔误: # 1. 第一行公式的mean.TREAT应为mean.TREAT1 # 2. 第三行公式的分母应为T3HIGH-T3LOW PROJ_DATA.coded <- as.coded.data(PROJ_DATA, TREAT1.coded ~ (mean.TREAT1 - T1MID)/(0.5*(T1HIGH-T1LOW)), TREAT2.coded ~ (mean.TREAT2 - T2MID)/(0.5*(T2HIGH-T2LOW)), TREAT3.coded ~ (mean.TREAT3 - T3MID)/(0.5*(T3HIGH-T3LOW)))
- 方法2:用
bquote动态构造公式,将参数值直接嵌入公式中
# 动态生成包含具体参数值的公式 f1 <- bquote(TREAT1.coded ~ (mean.TREAT1 - .(T1MID))/(0.5*(.(T1HIGH)-.(T1LOW)))) f2 <- bquote(TREAT2.coded ~ (mean.TREAT2 - .(T2MID))/(0.5*(.(T2HIGH)-.(T2LOW)))) f3 <- bquote(TREAT3.coded ~ (mean.TREAT3 - .(T3MID))/(0.5*(.(T3HIGH)-.(T3LOW)))) PROJ_DATA.coded <- as.coded.data(PROJ_DATA, f1, f2, f3)
其他注意事项
你当前的代码存在逻辑错误:你通过group_by汇总得到了PROJ_DATA1,但调用as.coded.data时传入的是原始未汇总的PROJ_DATA,二者数据结构不匹配,会导致后续分析结果出错,建议根据你的分析需求统一数据集。
内容的提问来源于stack exchange,提问作者Kurt Haunreiter
相关产品推荐
相关产品推荐

