【问题标题】:Objects not found when reading in a function via R Studio通过 R Studio 读取函数时未找到对象
【发布时间】:2014-05-15 17:27:39
【问题描述】:

当我通过 R-Studio 运行我的代码时,我被告知我有一个意外的花括号。

我有四个:两个用于打开/关闭函数,两个用于 for 循环。然后我被告知许多变量没有找到:意外的“for”、“directory”未找到、“basedf”未找到。就好像我的功能没有被识别。

我尝试将函数直接剪切并粘贴到控制台中,但出现了类似的错误。

是我的功能有缺陷,还是其他问题?

pollutantmean <- function(directory, pollutant, id = 1:332) {
    files <- list.files(directory)
    subsetFiles <- files[id]
    basedf <- data.frame(Date = as.Date(character(),
            sulfate = numeric(),
            nitrate = numeric(),
            ID = numeric())
    for (i in subsetFiles) {
        filepaths <- paste(directory,"/",i, sep='')
        basedf <- rbind(basedf, read.csv(filepaths))
    }
    good <- complete.cases(basedf)
    data2 <- basedf[good,pollutant]
    mean(data2)
}

【问题讨论】:

  • 您可以使用list.files(directory, full.names = TRUE) 节省一些步骤。我认为你需要几个[i]s。
  • 感谢@RichardScriven 的提示。不过我现在正在学习爬行

标签: r syntax-error curly-braces


【解决方案1】:

您只是在basedf 中缺少一个括号:

basedf <- data.frame(Date = as.Date(character(),
                     sulfate = numeric(),
                     nitrate = numeric(),
                     ID = numeric()))

那么一切都应该正常。

或者,您可以在 as.Date 的末尾加上方括号,如弗拉门戈所述,但您的函数仍然可以编译。这取决于你的函数的目的是什么。

【讨论】:

  • 非常感谢您在时光荏苒之时接受。想知道 R 中是否有一种方法可以帮助调试这样的语法,而不是转移我注意力的标准错误消息
  • 我假设您在意外大括号错误之前收到了错误Error: unexpected 'for' in:...。根据我的经验,如果您收到Error: unexpected...,通常意味着您缺少括号、大括号、引号等的匹配项。此外,Rstudio 有一些内置调试工具:rstudio.com/ide/docs/debugging/overview,但我不确定是否他们会在这里提供帮助,因为我从未使用过它们
  • 再次感谢您对我的功能的指点和额外的关注
  • @Doug Firr:请参阅下面缺少括号的答案。
【解决方案2】:

其实应该是这样的:

          basedf <- data.frame(Date = as.Date(character()),
                                              sulfate = numeric(),
                                              nitrate = numeric(),
                                              ID = numeric()) 

缺少括号,但它是as.Date() 的最后一个。

您似乎正在完成 Coursera 的作业。 您可能想为as.Date() 添加format

 R:> basedf <- data.frame(Date = as.Date(character(), format='%Y/%m/%d'),
                       sulfate = numeric(),
                       nitrate = numeric(),
                       ID = numeric())

 R:> basedf
 [1] Date    sulfate nitrate ID     
 <0 rows> (or 0-length row.names)

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 2018-01-06
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    • 2022-12-11
    • 2018-08-29
    相关资源
    最近更新 更多