r - 如何解决包含 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 "}"
有谁知道它可能是什么?
解决方案
大多数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)
}