【发布时间】:2015-10-17 15:50:07
【问题描述】:
我正在尝试在 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(19.4,11,8.4,right='BOTH')
st.pnorm(19.4, 11, 8.4, right = "BOTH") 中的错误:
找不到对象“BOTH”
(我知道 x*2 是不正确的,但我想看看在我实际编写该代码之前是否可以让它在结构上工作。)
【问题讨论】:
-
'TRUE' 不合逻辑,与 TRUE 不同,但可以强制为 TRUE。 'FALSE' 同上,但“BOTH”则不然。
-
identical("TRUE", TRUE) #[1] FALSE -
我认为您对技术问题的回答很好。实际上,当你在做一些奇怪的事情时,比如混合布尔值和字符串,我认为这是一个很好的指示,可以用不同的方式来做。如果您将 agument 命名为
tails而不是right,并且它有选项"left"、"right"或"both",那么您的函数代码可能会更清晰、更直接。单独来看,right = "BOTH"没有多大意义,它使用大写字母的唯一原因是,当布尔值而不是字符串时,TRUE 和 FALSE 是大写字母... -
对不起,我来晚了,但这对您有帮助,谢谢!