我有这个等式(可以通过this link访问):
我想用r创建两个函数。第一个是使用提供的第一个等式。
第二个功能是创建一个数学公式,其中第一个函数被替换。这是公式:
(http://i43.tinypic.com/b6vq5j.jpg)
这是我数据的负责人:(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
执行此操作后,@ janos建议:
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
接下来,我尝试实现第二个公式:
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
有人可以评论为创建第一个函数所执行的步骤,第二个函数以及我在“alog1 vs dig1”上运行函数的方式吗?
谢谢大家!!
答案 0 :(得分:0)
如果我理解正确,请转到:
f1 <- function(x, y) {
sqrt(sum((x - y) ^ 2) / 2 / length(x))
}
f1(1:3, 4:6)
这将输出:
[1] 2.12132
该函数假定x
和y
都是相同长度的向量。
您可以对第二个功能执行相同操作,并进行一些简化:
f2 <- function(x, y) {
200 * f1(x, y) / (x + y)
}
f2(1:3, 3:5)
要检查两个向量是否具有相同的长度,可以使用length
方法。如果这个假设失败,停止执行也是有用的,如:
stopifnot(length(x) == length(y))