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

循环追加数据框报错:无法将'closure'类型强制转为'list'类型

10折交叉验证循环中rbind报错及优化方案

问题背景

尝试在循环中执行10折交叉验证,将每折测试集的预测值存入空数据框,现有代码如下:

for(i in 1:10){
    testIndexes <- which(folds==i,arr.ind=TRUE)
    testData <- Data[testIndexes, ]
    trainData <- Data[-testIndexes, ]
    fit_train<-lmer(values~PTAH_base+PTAL_base+PTAU_base+ChemoDose+RT+(1|SAMPLE_NAME),data=trainData)
    pred_test <- predict(fit_train,newdata=testData,allow.new.levels=TRUE)
    df = rbind(df,pred_test)
}

运行时最后一行df = rbind(df,pred_test)出现错误:

Error in base::rbind(...) : 
  cannot coerce type 'closure' to vector of type 'list'

错误原因

  • 未初始化目标数据框:循环前未定义df变量,R会默认匹配同名的内置函数(df()是stats包的密度函数),导致rbind尝试拼接函数对象和预测结果,触发类型不兼容错误。
  • 预测结果类型不匹配:predict.lmer返回的是向量而非数据框,直接用rbind拼接向量和未初始化的"函数对象",进一步加剧了类型冲突。

修复方案

1. 提前初始化空数据框

在循环开始前,创建结构匹配的空数据框:

# 初始化空数据框,指定列名和数值类型
df <- data.frame(predicted_values = numeric(0))

2. 转换预测结果为数据框后拼接

将向量格式的pred_test转为数据框,再执行追加操作:

for(i in 1:10){
    testIndexes <- which(folds==i,arr.ind=TRUE)
    testData <- Data[testIndexes, ]
    trainData <- Data[-testIndexes, ]
    fit_train<-lmer(values~PTAH_base+PTAL_base+PTAU_base+ChemoDose+RT+(1|SAMPLE_NAME),data=trainData)
    pred_test <- predict(fit_train,newdata=testData,allow.new.levels=TRUE)
    # 把预测向量转为数据框,保持列名一致
    pred_df <- data.frame(predicted_values = pred_test)
    df <- rbind(df, pred_df)
}

更优的循环追加方案

循环中频繁使用rbind会反复分配内存,数据量大时效率极低。推荐用列表存储中间结果,最后一次性合并:

# 初始化空列表
pred_list <- list()

for(i in 1:10){
    testIndexes <- which(folds==i,arr.ind=TRUE)
    testData <- Data[testIndexes, ]
    trainData <- Data[-testIndexes, ]
    fit_train<-lmer(values~PTAH_base+PTAL_base+PTAU_base+ChemoDose+RT+(1|SAMPLE_NAME),data=trainData)
    pred_test <- predict(fit_train,newdata=testData,allow.new.levels=TRUE)
    # 将每折结果存入列表
    pred_list[[i]] <- data.frame(predicted_values = pred_test)
}

# 一次性合并所有列表元素为数据框
df <- do.call(rbind, pred_list)

如果使用dplyr包,合并步骤可简化为:

library(dplyr)
df <- bind_rows(pred_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:55:23