【问题标题】:R-Project if else syntax [duplicate]R-Project if else 语法[重复]
【发布时间】:2012-12-29 16:10:03
【问题描述】:

我正在学习一个教程,并且在语法方面遇到了困难。我看不到哪里出错了,但我从控制台收到错误消息。

我在一个目录中有一个包含 300 个 csv 文件的列表。用户将输入他们正在寻找信息的文件的编号(id)。格式如下:001.csv, 002.csv, 090.csv 250.csv 等等。

该功能是将输入转换为字符串,即csv文件名。例如如果 id 为 5,则返回 005.csv。如果输入220,输出220.csv。

代码如下:

csvfile <- function(id) {
  if (id < 10) { paste0(0,0,id,".csv"
  } else if (id < 100) {paste0(0,id,".csv"
  }else paste0(id,".csv")
}

这是控制台返回的错误:

> csvfile <- function(id) {
+ if (id < 10) { paste0(0,0,id,".csv"
+ } else if (id < 100) {paste0(0,id,".csv"
Error: unexpected '}' in:
"if (id < 10) { paste0(0,0,id,".csv"
}"
> }else paste0(id,".csv")
Error: unexpected '}' in "}"
> }

我可以看到 R 不喜欢我的一些 '}' 但不知道为什么?我的语法有什么问题?

【问题讨论】:

  • 已经有一个函数可以很好地完成您的函数的目标:sprintf("%03d.csv", id)。例如。如果你给它id=14,它会返回"014.csv"
  • @Backlin 但是这里的 OP 正在阅读教程......也许他需要更多关于如何纠正语法错误的帮助......
  • 是的,这就是我发表评论但没有回复的原因。就像提到 R 中有大量的小函数可以处理(请原谅我的用词)这样的琐碎任务。作为一个初学者,我编写了很多自己定制的小函数,但随着我的进步和发现“正确”的做事方式,我已经放弃了大部分。

标签: r if-statement syntax


【解决方案1】:

对于前两个 paste0 调用,您在其中缺少一些 ) 字符:

csvfile <- function(id) {
    if (id < 10) { 
        paste0(0,0,id,".csv")
    } else if (id < 100) {
        paste0(0,id,".csv")
    } else paste0(id,".csv")
}

【讨论】:

  • 谢谢!我不敢相信我忽略了这一点。
【解决方案2】:

一开始很难发现 R 中的语法错误。 控制台可以很好地测试一行代码,但当您尝试编写较长的语句时,它并不是很有帮助。

我的建议是使用 IDE 来帮助您编写函数。例如,为什么不试试RStudio

【讨论】:

  • 我去看看,干杯