将数据变量参数传递给for循环时匹配或对比错误

时间:2018-01-30 16:57:06

标签: r

settings_LOS = c(AUNMPSY2, AUNMPGE2, AUNMMED2, AUNMAHS2, AUNMRES2, AUNMSFA2)
for (setting in settings_LOS){ 
temp = subset(ltm_hospitalized, setting %in% c(1:31))
svymean(~setting, temp)
}

运行此操作时为什么会出现此错误?

Error in match(x, table, nomatch = 0L) : 
  'match' requires vector arguments

我也在向量中使用字符串

settings_LOS = c('AUNMPSY2', 'AUNMPGE2', 'AUNMMED2', 'AUNMAHS2', 'AUNMRES2', 'AUNMSFA2')

给了我这个错误

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels

当我尝试没有循环时,它可以正常工作,例如:

temp = subset(ltm_hospitalized, AUNMPSY2 %in% c(1:31))
svymean(~AUNMPSY2, temp)
           mean     SE
AUNMPSY2 8.4779 1.3647

出了什么问题?

1 个答案:

答案 0 :(得分:0)

settings_LOS = c('AUNMPSY2', 'AUNMPGE2', 'AUNMMED2', 'AUNMAHS2', 'AUNMRES2', 'AUNMSFA2')

for (setting in settings_LOS){ 
temp = subset(ltm_hospitalized, eval(parse(text=setting)) %in% c(1:31))
print(setting)
print(svymean(~eval(parse(text=setting)), temp))
print(svyquantile(~eval(parse(text=setting)), temp, seq(.10, .90, by=.10)))
}

原来我必须把它包装在eval(parse(text =))