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-

我试图在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-µ)/ø))})  
  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.pnormIf
right
是逻辑的,那么
==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})  
}