使用R的If/else语句语法

使用R的If/else语句语法,r,function,if-statement,syntax,R,Function,If Statement,Syntax,我有一个关于简单if语句的正确语法的语义问题,我正试图用R编写它(有Python编码的背景)。与Python语句相对应的R是什么: def zsco(data, mean, sd): if sd==0: z=0 else: z=abs((data-mean)/sd) return z 谢谢!:) 类似的写入R的方法是 zscoR <- function(data, mean, sd) { if(sd == 0) {

我有一个关于简单if语句的正确语法的语义问题,我正试图用R编写它(有Python编码的背景)。与Python语句相对应的R是什么:

def zsco(data, mean, sd):
    if sd==0:
        z=0
    else:
        z=abs((data-mean)/sd)
    return z

谢谢!:)

类似的写入
R
的方法是

zscoR <- function(data, mean, sd) {
     if(sd == 0) {
           0
       } else {
       abs((data - mean)/sd)
     }
    }

我尝试了类似的方法,但最终得到了一条警告消息:“在if(sd==0){:条件的长度大于1,将只使用第一个元素”我要补充的是,这段代码的音色来自我一直在编写的一个更大的脚本school@EmilyLauren
sd
平均值的长度是多少。我假设它们的长度是1。
zscoR(1:20,5,1.5)
More background:P我正在尝试计算大量生物实验和对照实验的Z分数。调用zsco函数的一个例子是:我尝试将计算向下迭代一整列(我的数据框有427行,每行代表一个不同的实验)生成相应Z分数的新列。到目前为止,该函数只会这样做,但在标准偏差=0的情况下,我的新Z分数列将填充“NaN”。这就是为什么我想自动声明为sd==0,z=0。我对使用R进行编码非常陌生,但我希望这能提供更多的上下文!@EmilyLauren我无法重现您所指的问题
zscoR(1:20,5,0)#[1]0
@EmilyLauren我猜您传递的是
数据
平均值
sd
具有相同的长度。在这种情况下,使用
ifelse
ifelse(sd==0,0,abs((数据-平均值)/sd))
zscoRM <- function(data, mean, sd) {
   ifelse(sd == 0, 0, abs((data - mean)/sd))
    }