构建mlogit数据框时遇Error in names(data)[ix]错误求助
解决dfidx函数报错"Error in names(data)[ix] : invalid subscript type 'language'"
错误核心原因
你传入dfidx的varying参数是sort——这是一个R内置函数(属于language类型),但dfidx要求该参数必须是备选方案对应的变量名字符向量。当函数尝试用这个语言对象作为下标去提取数据列名时,就会触发该错误。
解决方案
1. 修正varying参数
明确指定与出行方式备选方案相关的变量列名,比如你数据中对应自驾、公交、步行等方式的属性变量(如时间、成本等)。示例:
# 假设数据中不同出行方式的变量以car_、transit_、walk_开头 mode_attributes <- grep("^(car|transit|walk)_", names(nydata), value = TRUE)
如果变量名是固定的,也可以直接手动列出:
mode_attributes <- c("car_time", "transit_cost", "walk_distance")
2. 处理dplyr可能导致的兼容性问题
如果你用dplyr处理过数据集,大概率得到的是tibble格式,而dfidx对base R的data.frame兼容性更好,先转换数据类型:
nydata <- as.data.frame(nydata)
3. 重新调用dfidx
用修正后的参数执行:
nydata_df <- dfidx(nydata, shape = "wide", choice = "work_mode", varying = mode_attributes)
额外排查步骤
- 先打印
varying参数的内容,确认是字符向量而非函数/其他对象:print(mode_attributes) - 检查
work_mode列是否是因子或字符类型,且所有取值都能对应到varying参数指定的备选方案
内容的提问来源于stack exchange,提问作者Thomas E.M. Schlesinger
相关产品推荐
相关产品推荐

