【问题标题】:effect of colClasses in read.csv functionread.csv 函数中 colClasses 的效果
【发布时间】:2026-01-21 17:10:02
【问题描述】:

我希望函数只给出一个字符值作为输出,但是当 read.csv 采用 colClasses 的默认值时,会有额外的字符值输出。为什么我的函数在我指定 colClasses = "character" 时运行良好,但在其他情况下却不行?

    top <- function(state, outcome) {
      a <- read.csv("outcome-of-care-measures.csv")
      if (outcome == "heart attack") {
            data <- a[a[[7]]==state,]
            x <- suppressWarnings(as.numeric(data[[11]]))
            y <- min(x, na.rm = TRUE)
            index <- which(x == y)
            z <- data[index,2]
            z1 <- sort(z)
         print(z1[1]) 
      }
}      

输出(带有关于级别的不需要的信息)是

> top("TX", "heart attack")
[1] CYPRESS FAIRBANKS MEDICAL CENTER
4510 Levels: ABBEVILLE AREA MEDICAL CENTER ... ZUNI COMPREHENSIVE COMMUNITY HEALTH CENTER

【问题讨论】:

  • Coursera 上约翰霍普金斯大学 R 编程 课程中编程作业 3 的作业指导明确指出,在使用 read.csv() 读取数据时使用 stringsAsFactors=FALSE。此外,您在互联网上发布完整版的 best() 函数违反了 Coursera 荣誉准则。
  • 我已经发布了整个代码的一小部分,它甚至没有按应有的方式运行。尽管如此,我理解您的担忧,并且我已经更改了函数的名称,以免发生抄袭。 R Programming 让人们意识到这一点的唯一方法是阅读您的评论

标签: r csv read.csv


【解决方案1】:

因子(R 用来存储分类变量的数据类型)带有它们可能的级别,默认情况下会打印这些级别。有多种解决方案:

  • 按照您的建议读取数据时使用colClasses
  • 使用stringsAsFactors=FALSE
  • 照常读取文件,然后使用print(as.character(z1[1]))
  • 使用print(z1[1],max.levels=0)

【讨论】: