如何在数据框的每一行上执行一个函数,并将该输出的一个元素作为该行中的新列插入

Far*_*rel 5 row r

很容易对两个值进行精确二项式测试,但如果想要对一大堆成功和试验次数进行测试会发生什么.我创建了一个测试灵敏度的数据框,一个研究中潜在的参与者数量,然后我计算了每一行的成功程度.这是代码.

sens <-seq(from=.1, to=.5, by=0.05)
enroll <-seq(from=20, to=200, by=20)
df <-expand.grid(sens=sens,enroll=enroll)
df <-transform(df,succes=sens*enroll)
Run Code Online (Sandbox Code Playgroud)

但是现在我如何使用每一行的成功和试验次数组合来进行二项式测试.

我只对二项式检验的95%置信区间的上限感兴趣.我希望将该单个数字作为名为"upper.limit"的列添加到数据框中

我想到了一些类似的东西

binom.test(succes,enroll)$conf.int    
Run Code Online (Sandbox Code Playgroud)

唉,conf.int给出了诸如此类的东西

[1] 0.1266556 0.2918427
attr(,"conf.level")
[1] 0.95

我想要的只是0.2918427

此外,我有一种感觉,那里必须有.call,甚至可能是一个lapply,但我不知道这将如何贯穿整个数据框架.或者我应该使用plyr?

显然我的头在旋转.请停止.

42-*_*42- 9

如果这给你(几乎)你想要的东西,那么试试这个:

binom.test(succes,enroll)$conf.int[2]
Run Code Online (Sandbox Code Playgroud)

并且可以全面应用或跨行:

> df$UCL <- apply(df, 1, function(x)  binom.test(x[3],x[2])$conf.int[2] )
> head(df)
  sens enroll succes       UCL
1 0.10     20      2 0.3169827
2 0.15     20      3 0.3789268
3 0.20     20      4 0.4366140
4 0.25     20      5 0.4910459
5 0.30     20      6 0.5427892
6 0.35     20      7 0.5921885
Run Code Online (Sandbox Code Playgroud)