首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >代码调试与纠错理解

代码调试与纠错理解
EN

Stack Overflow用户
提问于 2016-10-20 07:47:17
回答 2查看 109关注 0票数 0

我编写了这个用于计数的代码iv,它读取一个充满文件的目录,并报告每个数据文件中完全观察到的情况的数量。函数应该返回一个数据帧,其中第一列是文件的名称,第二列是完整案例的数量。我需要帮助解决此代码中的错误,即:

[.data.frame(数据,i)中的错误:选定的未定义列 此外:警告信息: 1:在compi <- !is.na(datai)中:要替换的项目数不是替换长度的倍数 2:在compi <- !is.na(datai)中:要替换的项目数不是替换长度的倍数 3:在compi <- !is.na(datai)中:要替换的项目数不是替换长度的倍数

守则如下:

代码语言:javascript
运行
复制
complete<-function(directory, id=1:332){
        files.list<-list.files(directory, full.names=TRUE, pattern=".csv") 
        comp<-character()
        return.data<-data.frame()
        nobs<-numeric()

        for(i in id){
         data<-read.csv(files.list[i])
            comp[i]<-!is.na(data[i])
            nobs[i]<-nrow(comp[i])

    }
        return.data<-c(id,nobs)
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-20 16:31:05

您的问题是,!is.na()返回一个布尔向量而不是单个值,因此不能将多个元素插入到单个元素comp[i]中。

R中,有一个函数complete.cases,它与您所尝试的完全相同。有了这个功能,您的功能将如下所示

代码语言:javascript
运行
复制
complete<-function(directory, id=1:332){
  files.list<-list.files(directory, full.names=TRUE, pattern=".csv") 
  nobs <- numeric(length(id))
  for(i in id){
    data<-read.csv(files.list[i])
    nobs[i]<-sum(complete.cases(data))
  }
  return.data<-data.frame(id,nobs)
}

撇开你的代码不谈,我想指出几个缺陷。

  • 为什么comp类型为character
  • 如果事先知道的话,就分配向量的大小(nobs <- numeric(length(id)))
  • 您真的想只检查您的ith加载data.frame`的列data.frame`中缺少的值吗?
  • 如果指定return.data <- c(id,nobs)return.data将是一个数字向量,开头是ids,末尾是nobs
票数 2
EN

Stack Overflow用户

发布于 2016-10-20 08:28:26

您需要为您的数据提供索引。以便选择所有行和i列,例如compi<-!is.na(data,i)

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

https://stackoverflow.com/questions/40148427

复制
相关文章

相似问题

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