r中用户定义函数中的逻辑参数
我试图在r中编写一个函数,其中包含一个带三个选项的命名参数。(我想做的是在法线曲线的右尾端、左尾端或两个尾端找到区域。)这可能吗?我想到了这个,但是当我尝试使用r中用户定义函数中的逻辑参数,r,user-defined-functions,R,User Defined Functions,我试图在r中编写一个函数,其中包含一个带三个选项的命名参数。(我想做的是在法线曲线的右尾端、左尾端或两个尾端找到区域。)这可能吗?我想到了这个,但是当我尝试使用right=BOTH时,我得到了一个错误 st.pnorm<-function(x,µ,ø,right=c('TRUE','FALSE','BOTH')){ if (right==FALSE) return({pnorm((x-µ)/ø)}) if (right==TRUE) return({1-(pnorm((x-
right=BOTH
时,我得到了一个错误
st.pnorm<-function(x,µ,ø,right=c('TRUE','FALSE','BOTH')){
if (right==FALSE) return({pnorm((x-µ)/ø)})
if (right==TRUE) return({1-(pnorm((x-µ)/ø))})
if (right==BOTH) return({x*2})
}
st.pnorm
其中
充当not运算符。命名参数有三个选项表明字符串(如您所设置的)比布尔值更好。调用参数tail,而不是right,将使您的意图更加清晰
st.pnorm<-function(x,µ,ø,tail=c('right','left','both')){
if (tail=='left') return({pnorm((x-µ)/ø)})
if (tail=='right') return({1-(pnorm((x-µ)/ø))})
if (tail=='both') return({x*2})
}
st.pnormIfright
是逻辑的,那么==TRUE
是冗余的。if语句检查逻辑值,如果为真则继续。所以if(right)return(…)
和if(!right)return(..
相反。是的,我知道,但答案中的冗长比简单地删除它要好。@amwill04不,不是。你在延续一个错误,你应该纠正它。虽然这不是一个错误,它可能不是编写代码的最有效方式,但当有人读到它时,它会有意义。@amwill04这是一个错误,与对布尔逻辑的理解有缺陷。它恰好起作用,但这并不意味着它是错误的。“真”不符合逻辑,也不等于真,但可以强制为真。与“假”相同,但不等于“两者”。相同(“真”,真)#[1]FALSE
我认为你对这个技术问题的回答很好。实际上,当你在做一些奇怪的事情,比如混合布尔和字符串时,我认为这是一个很好的指示,表明你应该以不同的方式来做。如果你不把你的agment命名为right
,而是将你的agment命名为tails
,那么你的函数代码可能会更清晰、更直接t有选项“left”
,“right”
,或“both”
。孤立地说,right=“both”
没有多大意义,它在大写中的唯一原因是因为TRUE和FALSE是大写而不是字符串…抱歉我这么晚了,但这一切都很有帮助,谢谢大家!
st.pnorm<-function(x,µ,ø,right=TRUE){
if (!right) return({pnorm((x-µ)/ø)})
if (right) return({1-(pnorm((x-µ)/ø))})
if (right=="BOTH") return({x*2})
}
st.pnorm<-function(x,µ,ø,tail=c('right','left','both')){
if (tail=='left') return({pnorm((x-µ)/ø)})
if (tail=='right') return({1-(pnorm((x-µ)/ø))})
if (tail=='both') return({x*2})
}