如何在R中创建这些功能?

时间:2013-12-30 12:30:52

标签: r function formula

我有两个数学公式需要创建为R函数,然后在我的数据上运行它们。

首先让我向您展示我的数据的头部,我将其命名为" data_1"

  sex age seca1 chad1  DL alog1 dig1 scifirst1 crimetech1
1   F  20  1754  1750 175    95   95       432        429
2   F  19  1594  1596 158    56   55       420        417
3   F  20  1556  1558 156    74   72       435        437
4   F  18  1648  1640 167    67   65       431        434
5   F  19  1780  1780 178    99   67       433        431
6   F  19  1610  1620 165    56   54       423        425

现在让我们看一下公式以及我在r上创建函数的尝试:

1)第一个公式(f1):

第一个公式(可以通过this link访问):

这就是我创建第一个公式所做的:

f1 <- function(x, y) {sqrt(sum((x - y) ^ 2) / 2 / length(x))}

因为我需要在f1 vs data_1$alog1上运行data_1$dig1 ...这就是我所做的:

f1(data_1$alog1, data_1$dig1)

给出:4.3

现在问题是:我是否正确创建了该功能?它应该只给我一个价值吗?

2)第二个公式(f2):

第二个功能是创建一个数学公式,其中第一个函数被替换。这是公式 - &gt; (关注this link):

在第二个公式中以红色显示的

&#34; f1&#34; 应该是第一个创建的函数(第一个公式)。

接下来,我将采取以下措施来实施第二个公式:

f2 <- function(x, y){(f1 / ((x + y) / 2)) * 100}

但是,当我在data_1$alog1 vs data_1$dig1上运行它来计算这些数据的错误变异系数时,我得到:

> f2(data_1$alog1, data_1$dig1)
Error in f1/((x + y)/2) : non-numeric argument to binary operator

有人可以评论为创建函数所执行的步骤以及我在&#34; alog1 vs dig1&#34;上运行函数的方式吗?

1 个答案:

答案 0 :(得分:0)

如果x是向量,则sum(x)是标量。要获得累积总和,请使用cumsum(x)

f1 <- function(x, y) {sqrt(cumsum((x - y) ^ 2) / 2 / length(x))}
f1(data_1$alog1, data_1$dig1)

返回

[1] 0.0000000 0.2886751 0.6454972 0.8660254 9.2781104 9.2960565    

而不是简单地返回最后一个值。 在第二个函数定义中,您忘记f1(x, y)的函数:

f2 <- function(x, y) {f1(x, y) / ((x + y) / 2) * 100}
f2(data_1$alog1, data_1$dig1)
[1]  0.0000000  0.5201354  0.8842428  1.3121597 11.1784463 16.9019209