You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:12:28