我有两个数学公式需要创建为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;上运行函数的方式吗?
答案 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