1

嗨,我正在尝试理解 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 中完成作业的输入都将是一个奖励。

非常感谢!

4

2 回答 2

4

这是一个聚合初始化器:

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所以如果surv1survivor[surv]值为0.996994316577911


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

于 2012-09-03T09:53:20.363 回答
3

那么,鉴于@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
于 2012-09-03T10:07:04.377 回答