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

使用自定义plyr函数聚合Mindware文件时出错求助

问题描述

我用一个函数聚合Mindware程序生成的大量Excel文件,半年前运行正常,现在用ldply批量处理时报错,但单独用mw()处理单个文件没问题。已尝试升降级plyr、重装所有包,仍无法解决,函数作者也不清楚原因。

相关代码

单个文件处理函数mw

mw <- function (filename) {
    require(readxl)
    require(magrittr)
    d <- read_excel(filename)
    names(d) <- NULL
    newd <- data.frame(
      row =  t(as.vector(d[6, 2:ncol(d)])) %>% as.numeric(), 
      video =  t(as.vector(d[3, 2:ncol(d)])) ,
      id = filename)
    newd <- subset(newd, is.na(time) == F)
  }

批量处理代码

library(magrittr)
library(foreach)
library(plyr)
setwd("#set wd here")

my_physio_data <- ldply(.data = list.files(pattern="*.xlsx"),
              .fun = mw,
              .parallel = TRUE) 

报错信息

Error in do.ply(i) : task 82 failed - "attempt to apply non-function"
解决思路
  • 排查第82个文件:报错明确指向第82个任务,先提取该文件(list.files(pattern="*.xlsx")[82])单独用mw()测试,检查是否存在文件损坏、格式异常或内容缺失的情况。
  • 修复函数逻辑漏洞:当前mw函数里的subset(newd, is.na(time) == F)存在明显问题——newd的列只有row、video、id,根本没有time列,这会导致subset执行失败,返回异常对象,批量处理时触发“非函数应用”错误。要么把过滤条件改成实际存在的列(比如is.na(row) == F),要么直接删除这行代码;同时确保函数明确返回处理后的newd(可以加return(newd),或保留最后一行的返回逻辑)。
  • 关闭并行测试:plyr的.parallel=TRUE依赖foreach和并行后端,可能是并行环境下包加载、变量作用域出了问题。先把.parallel改成FALSE运行,若正常,再手动配置并行环境:
    library(doParallel)
    cl <- makeCluster(detectCores())
    registerDoParallel(cl)
    # 再执行ldply代码
    stopCluster(cl)
    
  • 替换为更稳定的工具:plyr已停止维护,换成purrr::map_dfr更可靠,示例代码:
    library(purrr)
    library(readxl)
    library(magrittr)
    
    mw_fixed <- function(filename) {
      d <- read_excel(filename)
      names(d) <- NULL
      newd <- data.frame(
        row = t(as.vector(d[6, 2:ncol(d)])) %>% as.numeric(),
        video = t(as.vector(d[3, 2:ncol(d)])),
        id = filename
      )
      # 修正过滤逻辑,比如过滤row为空的行
      newd[!is.na(newd$row), ]
    }
    
    my_physio_data <- list.files(pattern="*.xlsx") %>% map_dfr(mw_fixed)
    
  • 核对包版本差异:用sessionInfo()输出当前所有包的版本,对比半年前的环境记录(如果有),重点检查readxl、magrittr、plyr的版本变化,尝试回退到之前的稳定版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:40:27