首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取错误:在R3.1.2中执行函数时出现的“不正确的维度数”。它意味着什么,以及如何修复它?

获取错误:在R3.1.2中执行函数时出现的“不正确的维度数”。它意味着什么,以及如何修复它?
EN

Stack Overflow用户
提问于 2015-02-17 09:24:43
回答 1查看 821关注 0票数 0

让我首先描述一下我的功能和我要处理的事情。

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

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

  1. 我有这些.csv文件的列表向量。
  2. 作为一个主数据框架,结合了所有这些文件,我使用了data.table包。
  3. 描述功能的时间: 污染平均<-函数(旁观者,污染物,id)参数<- rbindlist(filelist) setkey( specdata,.= ' ID ) ##,因为如果(污染物==‘硫酸盐’){返回(平均(规格数据,‘硫酸盐’),则需要对id进行排序(I in id)。( na.rm =TRUE){if(污染物==‘硝酸盐’){返回(平均(specdata(,硝酸盐,na.rm =真))}else}{print(‘NA’‘}

现在这个函数非常简单。我定义了spectate,定义了for循环来计算每个id的数据。在运行函数时,我不会出错。但有一个错误是最后一个障碍。

"specdata“中的”'Error“,”硫酸盐“:当我执行函数时,不正确的维度数。有人能详细说明一下吗?

EN

回答 1

Stack Overflow用户

发布于 2015-02-17 09:56:37

我认为这是plyr函数非常有用的一种任务。更具体地说,我认为您应该使用ldply和一个定制的函数。

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

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

代码语言:javascript
复制
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)

希望这能有所帮助。可能第一次无法工作,您可能需要添加一些附加条件等来处理不具有预期内容的文件。很乐意讨论它正在做什么,但最好读一读,因为一旦您了解了这种方法,就会使各种任务变得更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28558533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档