【问题标题】:If/else statement syntax using R使用 R 的 if/else 语句语法
【发布时间】:2018-09-27 16:56:27
【问题描述】:

我有一个关于我尝试用 R 编写的 simple if 语句的正确语法的语义问题(具有 Python 编码背景)。什么是 R 等价于 Python 语句:

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

谢谢! :)

【问题讨论】:

    标签: r function if-statement syntax


    【解决方案1】:

    R 的类似写法是

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

    如果所有输入参数长度相同且大于1,则使用ifelse

    zscoRM <- function(data, mean, sd) {
       ifelse(sd == 0, 0, abs((data - mean)/sd))
        }
    

    【讨论】:

    • 我尝试了类似的方法,但我最终收到一条警告消息:“在 if (sd==0) {: 条件长度 > 1 并且只使用第一个元素”我'会补充一点,这个小代码来自我为学校写的一个更大的脚本
    • @EmilyLauren sdmean 的长度是多少。我假设这些长度为 1。zscoR(1:20, 5, 1.5)
    • 更多背景:P 我正在尝试计算大量生物实验和对照实验的 Z 分数。当我调用我的 zsco 函数时的一个示例:我尝试向下迭代整个列的计算(我的数据框有 427 行,每行代表一个不同的实验)以生成对应 Z 分数的新列。到目前为止,该函数就是这样做的,但在标准偏差 = 0 的情况下,我的新 Z 分数列将填充“NaN”。这就是为什么我要自动声明是sd==0,z=0。我对使用 R 进行编码非常陌生,但我希望这能提供更多背景信息!
    • @EmilyLauren 我无法重现您所指的问题zscoR(1:20, 5, 0)# [1] 0
    • @EmilyLauren 我猜你通过datameansd 具有相同的长度。在这种情况下,使用ifelseifelse(sd == 0, 0, abs((data - mean)/sd))
    猜你喜欢
    • 2020-09-06
    • 1970-01-01
    • 2019-04-09
    • 2016-10-13
    • 2017-02-05
    • 2016-11-13
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多