【问题标题】:C variable assignment and R equivalentC 变量赋值和 R 等效项
【发布时间】:2012-08-28 01:10:18
【问题描述】:

您好,我正在尝试理解 C 中的以下变量赋值,并尝试在 R 中重新编写它。我经常使用 R,但只真正看过 C。

    int age,int b_AF,int b_ra,int b_renal,int b_treatedhyp,int b_type2,double bmi,int ethrisk,int fh_cvd,double rati,double sbp,int smoke_cat,int surv,double town
    )
    {
        double survivor[3] = {
            0,
            0.996994316577911,
            0.993941843509674

        };
    a = /*pre assigned*/ 
    double score = 100.0 * (1 - pow(survivor[surv], exp(a)) );
    return(score);
}

幸存者[surv] 在这种情况下如何工作?解释会很有帮助,任何关于如何在 R 中完成作业的输入都是额外的。

非常感谢!

【问题讨论】:

    标签: c r variables variable-assignment


    【解决方案1】:

    这是一个聚合初始化器:

    double survivor[3] = {
        0,
        0.996994316577911,
        0.993941843509674
    };
    

    并且等价于:

    double survivor[3];
    survivor[0] = 0;
    survivor[1] = 0.996994316577911;
    survivor[2] = 0.993941843509674;
    

    survivor[surv] 是存储在survivor 数组索引处的值。数组索引从0 运行到N - 1,所以如果surv1,那么survivor[surv] 的值为0.996994316577911


    注意,当前编写的函数不会检查 surv 是否是数组 survivor(即 surv > -1surv < 3)的有效索引,并且存在未定义行为的风险。

    【讨论】:

    • 非常感谢 - 我认为这与将变量分配到数组中有关。
    【解决方案2】:

    鉴于@hmjd 的答案,R 等价物将是

    survivor <- c(0, 0.996994316577911, 0.993941843509674)
    

    或者如果 survivor 已经存在并且您希望分配到前 3 个元素中:

    survivor[1:3] <- c(0, 0.996994316577911, 0.993941843509674)
    

    (注意 R 的索引是从 1 开始的,而 C 的索引是从 0 开始的。)


    至于提取,大体思路与C相同,但细节很重要:

    R> survivor[0] ## 0 index returns an empty vector
    numeric(0)
    R> survivor[-1] ## negative index **drops** that element
    [1] 0.9969943 0.9939418
    R> survivor[10] ## positive outside length of vector returns NA
    [1] NA
    R> surv <- 2
    R> survivor[surv] ## same holds for whatever surv contains
    [1] 0.9969943
    

    【讨论】:

    • 非常好 - 非常感谢 - 关于在 pow 函数中调用survive[surv],是否保持不变?
    • 是的,survivor[surv] 将提取survivor 向量的survth 索引,但处理范围外的索引的方式与 C 不同。我将更新答案。
    • 感谢 Gavin - 这非常有帮助,我肯定会为您提出的每个案例编写一些错误处理程序。
    猜你喜欢
    • 1970-01-01
    • 2012-11-03
    • 2020-07-23
    • 1970-01-01
    • 2015-12-07
    • 2012-07-23
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多