R-将公式应用于列中的所有值

R-将公式应用于列中的所有值,r,foreach,plyr,R,Foreach,Plyr,我有一个数据帧b1: 这些数字向量: R = 100000 Sfi = as.numeric(c(0:99)) 我想在数据框b1中创建另一列,其中的值来自公式 q = prod((R - Ac - Sfi) / (R - Sfi)) 当我将Ac中的值直接插入方程式时,我得到了一个合理的答案。但是,我在将其应用于数据帧时非常失败。我有大量类似的数据帧,所以我想用一种有效的方法来进行这些计算 我尝试了adply,但对Ac的所有值都得到了相同的结果: adply(b1,1,function(

我有一个数据帧
b1

这些数字向量:

R = 100000  
Sfi = as.numeric(c(0:99))
我想在数据框
b1
中创建另一列,其中的值来自公式

q = prod((R - Ac - Sfi) / (R - Sfi))
当我将
Ac
中的值直接插入方程式时,我得到了一个合理的答案。但是,我在将其应用于数据帧时非常失败。我有大量类似的数据帧,所以我想用一种有效的方法来进行这些计算

我尝试了
adply
,但对
Ac
的所有值都得到了相同的结果:

adply(b1,1,function(x){  
     q=prod((R-b1$Ac-Sfi)/(R-Sfi))  
     data.frame(Qipg=q)  
     })

这里我得到了这个错误:

我还尝试了
foreach
功能:

foreach(i = b1$Ac, Sfi = c(0:99)) %do% (prod(R - i - Sfi) / (R - Sfi))
但是,无论我插入了什么数字,都会得到相同的数值结果,
Sfi
--
c(0:99)
c(0:500)
,无论什么。我也得到了同样的结果,无论我是否包括
产品
,或者没有函数与
(R-I-Sfi)/(R-Sfi)


关于我应该做些什么来获得我想要的结果(列)有什么想法吗?

您可以使用
apply
函数来循环所有行并计算公式。首先,您应该创建一个单变量数据帧,其中只包含
Ac
的值,以便向下循环

Ac <- data.frame(b1$Ac)
b1$q <- apply(Ac, 1, function(x) prod((R-x-Sfi)/(R-Sfi)))

Ac您需要编辑一些文本来解释您的答案;因此,不鼓励只使用代码的答案。由于
Ac
位于data.frame中,您需要使用
$
-表示法引用它:
prod((R-b1$Ac-Sfi)/(R-Sfi))
。如果您想在一系列值上运行该公式,请使用
sapply
b1$q这就行了!谢谢
foreach(i = b1$Ac, Sfi = c(0:99)) %do% (prod(R - i - Sfi) / (R - Sfi))
Ac <- data.frame(b1$Ac)
b1$q <- apply(Ac, 1, function(x) prod((R-x-Sfi)/(R-Sfi)))