C变量赋值和R等价

时间:2012-09-03 09:45:32

标签: c r variables variable-assignment

您好我正在尝试理解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);
}

幸存者[幸存]如何在这种背景下工作?解释会有所帮助,任何关于如何在R中进行分配的输入都是奖励。

非常感谢!

2 个答案:

答案 0 :(得分: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,因此如果surv1,则survivor[surv]的值为0.996994316577911


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

答案 1 :(得分: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