在以下示例中,我定义了' myFunc',然后测试两个错误条件。如果没有满足任何错误条件,我想要' myFunc'执行。
State<-rep(c("NY","NJ"),times=5)
Test<-rep(c("LSAT", "MCAT", "GRE","TOEFL","ACT"), times=2)
Grade<-trunc(rep((seq(from=500, to=600,length.out=10))))
dat<-data.frame(Test,State,Grade)
statelist<-c("NY","NJ","CA")
testlist<-c("LSAT", "MCAT", "GRE","TOEFL","ACT","VSAT")
myFunc<-function(state,test)
{
dat<-subset(dat,subset=(State==state & Test==test))
}
ifelse(!state %in% statelist, stop("invalid state"),
ifelse(!test %in% testlist, stop("invalid test"),
ifelse(myFunc)
当我使用以下变量测试函数时:
myFunc("NY", "GRE")
我收到此错误消息:
Error: unexpected symbol in:
" ifelse(myFunc)
myFunc"
此外,当我使用无效状态进行测试时,&#39; NN&#39;
myFunc(&#34; NN&#34;,&#34; GRE&#34;)
&#34;无效状态&#34;消息未被触发,并且在我使用有效状态时生成了相同的错误消息。
我组织我的三个ifelse陈述的方式有问题吗?我希望将两个错误检查保留在函数之外,以便该函数仅处理子集化。
答案 0 :(得分:2)
以下是我将如何做到这一点,我转而使用if
声明,因为这对我来说更有意义
myFunc <- function(state,test){
dat <- subset(dat,subset=(State==state & Test==test))
if(!state %in% statelist)
{stop("invalid state")}
if(!test %in% testlist)
{stop("invalid test")}
else
{return(dat)}
}
R> myFunc("NY", "GRE")
Test State Grade
3 GRE NY 522
R> myFunc("NN", "GRE")
Error in myFunc("NN", "GRE") : invalid state
R> myFunc("NY", "GREY")
Error in myFunc("NY", "GREY") : invalid test
答案 1 :(得分:0)
有更好的方法来处理错误,但这里是如何修复你的功能。你需要在你的功能中使用ifelse。
myFunc<-function(state,test)
{
ifelse(!state %in% statelist, stop("invalid state", call. = FALSE),
ifelse(!test %in% testlist, stop("invalid test", call. = FALSE), return(subset(dat,subset=(State==state & Test==test)))))
}
myFunc("NY", "GRE")
> Test State Grade
> 3 GRE NY 522
myFunc("NN", "GRE")
> Error: invalid state
myFunc("NY", "Cake")
> Error: invalid test