首页 > 解决方案 > 如何解决包含 ifelse 语句的用户自定义函数中“}”中意外的“}”?

问题描述

所以我有这个功能:

library(worms)
library(dplyr)
worms_from_species_list<-function(file_name,file_location,header=T){
  if(header==T){
    setwd(file_location)
    lista<-read_tsv(file_name)
    names(lista)<-"Species"
    worms_df<-wormsbynames(lista[,"Species"])
  }else{
    setwd(file_location)
    lista<-read_tsv(file_name)
    worms_df<-wormsbynames(lista)
  }
  worms_df<-worms_df%>%
    mutate(new_name = ifelse(status=="unaccepted" & !is.na(status),valid_name,
                             ifelse(status=="accepted" & !is.na(status),name,name))
  return(worms_df)
}

但是,我什至无法运行它,因为它返回以下错误:

Error: unexpected ')' in:
"  worms_df<-worms_df%>%
                             ifelse(status=="accepted" & !is.na(status),name,name))"
> }
Error: unexpected '}' in "}"

有谁知道它可能是什么?

标签: r

解决方案


大多数IDE以某种形式提供paren-matching。在这种情况下,它建议您需要关闭mutate呼叫。

例如,在 RStudio 中,当光标位于 的右侧时name)),表示该行的最后一个右括号与 的左括号匹配ifelse

在此处输入图像描述

|光标,背景灰色(是匹配的左括号。

类似地(虽然它不太常用),如果配置为 emacs/ess 可以显示它:

在此处输入图像描述

在这里,右括号及其匹配的左括号都以蓝色背景突出显示。

RStudio(和其他 IDE)中的另一个技巧是缩进行并查看它们的平移位置。你会看到我在上面的第一个屏幕截图之前做了这个,你可以看到它认为return(worms_df)mutate.

解决方案如下所示:

worms_from_species_list<-function(file_name,file_location,header=T){
  if(header==T){
    setwd(file_location)
    lista<-read_tsv(file_name)
    names(lista)<-"Species"
    worms_df<-wormsbynames(lista[,"Species"])
  }else{
    setwd(file_location)
    lista<-read_tsv(file_name)
    worms_df<-wormsbynames(lista)
  }
  worms_df<-worms_df%>%
    mutate(new_name = ifelse(status=="unaccepted" & !is.na(status),valid_name,
                             ifelse(status=="accepted" & !is.na(status),name,name)))
  return(worms_df)
}

推荐阅读