r 中用户定义函数中的逻辑参数

use*_*414 5 r user-defined-functions

我正在尝试在 r 中编写一个函数,其中包含带有三个选项的命名参数。(我想做的是找到正态曲线的右尾部、左尾部或两个尾部的面积。)这可能吗?我已经想出了这个,但是当我尝试使用时出现错误right=BOTH.

\n\n
st.pnorm<-function(x,\xc2\xb5,\xc3\xb8,right=c(\'TRUE\',\'FALSE\',\'BOTH\')){  \n  if (right==FALSE) return({pnorm((x-\xc2\xb5)/\xc3\xb8)})  \n  if (right==TRUE) return({1-(pnorm((x-\xc2\xb5)/\xc3\xb8))})  \n  if (right==BOTH) return({x*2})  \n}   \n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

st.pnorm(19.4,11,8.4,right=\'BOTH\')
\n st.pnorm(19.4, 11, 8.4, right = "BOTH") 中的错误:
\n 未找到对象 \'BOTH\'

\n
\n\n

(我知道 x*2 不正确,但我想看看在实际编写代码之前是否可以使其在结构上工作。)

\n

amw*_*l04 4

st.pnorm<-function(x,\xc2\xb5,\xc3\xb8,right=TRUE){  \n     if (right==FALSE) return({pnorm((x-\xc2\xb5)/\xc3\xb8)})  \n     if (right==TRUE) return({1-(pnorm((x-\xc2\xb5)/\xc3\xb8))})  \n     if (right=="BOTH") return({x*2})  \n } \n
Run Code Online (Sandbox Code Playgroud)\n\n

TRUE并且FALSE应该用引号引起来,而BOTH确实需要,因此if (right=="BOTH"). 此外,right=TRUE您还向TRUE.

\n\n

编辑

\n\n

正如 @KonradRudolph 在评论中指出的那样,该if语句正在检查括号内的内容TRUE是否是。如果是,TRUE则它将执行,否则将跳过。因此,上面rightTRUEasFALSE可以重写为:

\n\n
st.pnorm<-function(x,\xc2\xb5,\xc3\xb8,right=TRUE){  \n     if (!right) return({pnorm((x-\xc2\xb5)/\xc3\xb8)})  \n     if (right) return({1-(pnorm((x-\xc2\xb5)/\xc3\xb8))})  \n     if (right=="BOTH") return({x*2})  \n }  \n
Run Code Online (Sandbox Code Playgroud)\n\n

其中!充当非运算符。

\n