在R中用OpenMX做LOSEM双生子分析时条件长度>1错误咨询
LOSEM双生子分析中
umxGxE_window函数的错误解决 问题背景
在R环境使用OpenMX进行LOSEM双生子分析时,变量包含标准化因变量a.res.、b.res.,标准化年龄z_age,以及区分同卵/异卵双生子的zygof1f2字段。编写代码如下:
#Select dependent variables. selDVs = c("a.res.", "b.res.") #Select moderator moderator = "z_age" #Subset MZ and DZ data mzData = subset(DS_HA, zygof1f2 == "MZ", c(selDVs, moderator)) dzData = subset(DS_HA, zygof1f2 == "DZ", c(selDVs, moderator)) #Define LOSEM increments targets = seq(from = -1.0, to = 2.0, by = .01) #Run and plot for specified windows output <- umxGxE_window(selDVs = selDVs, moderator = moderator, mzData = mzData, dzData = dzData, target = targets)
执行最后一行代码时触发错误:
Error in if (target < min(modVar)) { : the condition has length > 1
错误原因
这个错误的核心是umxGxE_window函数的target参数要求传入单个数值,但你传入了一个长度为301的向量(targets是通过seq生成的序列)。函数内部的if(target < min(modVar))判断只能处理单个逻辑值,当target是向量时,target < min(modVar)会返回一个长度和target一致的逻辑向量,导致if语句无法执行,从而报错。
解决方法
需要遍历targets中的每个数值,逐个调用umxGxE_window函数,再收集所有结果。可以用lapply实现批量处理:
# 遍历targets中的每个值,执行分析 output_list <- lapply(targets, function(t) { umxGxE_window(selDVs = selDVs, moderator = moderator, mzData = mzData, dzData = dzData, target = t) }) # 如果需要将结果合并为数据框(根据函数返回结构调整) output_df <- do.call(rbind, lapply(output_list, as.data.frame))
另外,建议先通过?umxGxE_window查看函数官方文档,确认参数的具体要求——该函数的target参数用于指定单个分析窗口的中心值,而非批量序列,因此必须逐个传入。
内容的提问来源于stack exchange,提问作者Hugo
相关产品推荐
相关产品推荐

