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

使用order()排序data.frame的model_AIC列时遇一元运算符参数无效错误

问题:按model_AIC列排序data.frame时出错

数据结构示例

data <- structure(list(model_ID = list(model_table = character(0), model_info_2 = "S_M ~ 1 + average_Ca_LOG + (1 + average_Ca_LOG | ID)", 
                               model_info_2 = "S_M ~ 1 + average_Mg_LOG + (1 + average_Mg_LOG | ID)", 
                               model_info_2 = "S_M ~ 1 + average_K_LOG + (1 + average_K_LOG | ID)", 
                               model_info_2 = "S_M ~ 1 + average_Mn_LOG + (1 + average_Mn_LOG | ID)", 
                               model_info_2 = "S_M ~ 1 + average_Cu_LOG + (1 + average_Cu_LOG | ID)", 
                               model_info_2 = "S_M ~ 1 + average_Zn_LOG + (1 + average_Zn_LOG | ID)"), 
               model_AIC = list(model_table = numeric(0), model_info_2 = "1504.62", 
                                model_info_2 = "1636.35", model_info_2 = "1620", model_info_2 = "1407.41", 
                                model_info_2 = "1855.04", model_info_2 = "1706.71"), 
               model_BIC = list(model_table = numeric(0), model_info_2 = "1531.06251699724", 
                                model_info_2 = "1662.78856677628", model_info_2 = "1646.44040865957", 
                                model_info_2 = "1433.85260732148", model_info_2 = "1881.47787878473", 
                                model_info_2 = "1733.15601219833")), class = "data.frame", row.names = c("model_table", 
                                                                                                         "model_info_2", "model_info_2.1", "model_info_2.2", "model_info_2.3", 
                                                                                                         "model_info_2.4", "model_info_2.5"))

执行的排序代码

data[order(-data$model_AIC),][1:5,]

报错信息(中文翻译)

错误于 -data$model_AIC : 一元运算符的无效参数

错误原因

  1. model_AIC列是列表类型:该data.frame的model_AIC列存储的是列表,而非普通数值向量,无法直接对列表使用一元负号-进行排序操作。
  2. 数值存储为字符串:列表中除第一行空元素外,其余AIC值均为字符串格式(如"1504.62"),而非数值型,即使是向量也不能对字符串应用负号。
  3. 存在空元素:第一行model_table对应的model_AIC是空的numeric(0),会干扰排序逻辑。

解决方法

步骤1:转换model_AIC为数值向量

用sapply将列表元素转换为数值型,空元素替换为NA:

# 新增数值型的model_AIC列
data$model_AIC_num <- sapply(data$model_AIC, function(x) {
  if (length(x) == 0) NA else as.numeric(x)
})

步骤2:按转换后的列排序

使用转换后的数值列降序排序,用na.last = TRUE将空值(NA)放到最后:

# 降序排序并取前5行
sorted_data <- data[order(-data$model_AIC_num, na.last = TRUE), ][1:5, ]

简化写法(无需新增列)

也可直接在排序时完成转换:

sorted_data <- data[order(-sapply(data$model_AIC, function(x) if(length(x)==0) NA else as.numeric(x)), na.last = TRUE), ][1:5,]

验证结果

执行后会得到按AIC值从大到小排序的前5行数据,空行(model_table)会被排在最后。

内容的提问来源于stack exchange,提问作者confusedindividual

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:10:52