获取错误:';尺寸数量不正确';执行R3.1.2中的函数时。这意味着什么?如何修复?

获取错误:';尺寸数量不正确';执行R3.1.2中的函数时。这意味着什么?如何修复?,r,data.table,R,Data.table,首先让我向您描述一下功能和我必须处理的内容 基本上,这个文件夹包含大约300个逗号分隔的值文件。每个文件都有一个与之关联的ID,如200.csv中的ID 200,并包含一些与硫酸盐和硝酸盐污染物有关的数据。我要做的是计算一个ID或一系列ID的这些粒子的平均值。例如,计算ID 5的硫酸盐平均值或计算ID 5:10的硫酸盐平均值 这是我处理数据的过程,但最后我得到了一个愚蠢的错误 我有这些.csv文件的列表向量 一个包含所有这些文件的主数据框架,我使用data.table包来实现这一点 描述功能的时

首先让我向您描述一下功能和我必须处理的内容

基本上,这个文件夹包含大约300个逗号分隔的值文件。每个文件都有一个与之关联的ID,如200.csv中的ID 200,并包含一些与硫酸盐和硝酸盐污染物有关的数据。我要做的是计算一个ID或一系列ID的这些粒子的平均值。例如,计算ID 5的硫酸盐平均值或计算ID 5:10的硫酸盐平均值

这是我处理数据的过程,但最后我得到了一个愚蠢的错误

  • 我有这些.csv文件的列表向量
  • 一个包含所有这些文件的主数据框架,我使用data.table包来实现这一点
  • 描述功能的时间:

    pollutantmean <- function(spectate,pollutant,id)
                     specdata <- rbindlist(filelist)
                     setkey(specdata, ... = 'ID)     ## because ID needs to be sorted out
                     for(i in id)
                     if(pollutant == 'sulphate'){
                     return(mean(specdata[, 'sulphate'], na.rm = TRUE))
                     }else{
                     if(pollutant == 'nitrate'){
                     return(mean(specdata([, nitrate], na.rm = TRUE))
                     }else{
                     print('NA')}
                     }
                     }
    

    polluantmean我认为这类任务中的
    plyr
    功能将非常有用。 更具体地说,我认为您应该使用
    ldply
    和定制函数

    ldply
    :在列表中作为输入,在数据帧中作为输出。列表应为目录内容,输出为每个csv文件的摘要值

    您的示例不完全可复制,因此下面的代码只是一个示例结构:

    require(plyr)
    require(stringr)
    
    files_to_extract <- list.files("dir_with_files", pattern=".csv$")
    files_to_extract <- str_sub_replace(files_to_extract, ".csv$", "")
    
    fn <- function(this_file_name){
        file_loc <- paste0(dir_with_files,  "/", this_file_name, ".csv")
    
        full_data <- read.csv(file_loc)
        out <- data.frame(
            variable_name=this_file_name,
            variable_summary= mean(full_data$variable_to_summarise)
        )
        return(out) 
    }
    
    summarised_output <- ldply(files_to_extract, fn)
    
    require(plyr)
    要求(stringr)
    
    文件\u至\u摘录编辑:对输入错误表示歉意。它是“specdata”,而不是spectate。Noob自动更正:X这一行中有两个打字错误:
    setkey(specdata,…='ID)