#r #formula #equation
#r #формула #уравнение
Вопрос:
У меня есть формула, которая выглядит примерно так: y = 2 3x x ^ 2, и у меня есть список входных значений, которые я хотел бы подключить к x, а затем отобразить его позже.
Итак, что я делаю, это
x<-seq(-2,2, length.out=20)
formula <- y~2 3*x x^2
Но я не уверен, как подключить список значений x к формуле и получить выходное значение из кодов.
Будем признательны за любую помощь.
Ответ №1:
Вы могли бы определить функцию для вычисления формулы, как показано ниже:
getScore <- function(x) {
2 3*x x^2
}
x <- seq(-2,2, length.out=20)
getScore(x)
[1] 0.00000000 -0.16620499 -0.24376731 -0.23268698 -0.13296399 0.05540166
[7] 0.33240997 0.69806094 1.15235457 1.69529086 2.32686981 3.04709141
[13] 3.85595568 4.75346260 5.73961219 6.81440443 7.97783934 9.22991690
[19] 10.57063712 12.00000000
Ответ №2:
Вы можете преобразовать свою формулу в функцию и использовать sapply
:
x = seq(-2,2, length.out=20)
my.function = function(x){
return(2 3*x x^2)
}
y = sapply(x, my.function)
> y
[1] 0.00000000 -0.16620499 -0.24376731 -0.23268698 -0.13296399 0.05540166 0.33240997
[8] 0.69806094 1.15235457 1.69529086 2.32686981 3.04709141 3.85595568 4.75346260
[15] 5.73961219 6.81440443 7.97783934 9.22991690 10.57063712 12.00000000
Если вы хотите list
, то используйте lapply
вместо sapply
.
Комментарии:
1. Здесь нет ничего плохого, но в этом также нет необходимости,
sapply
потому что все вычисления вmy.function
векторизованы. Вызовmy.function(x)
вернет тот же результат, что и вызовsapply(x, my.function)
. Смотрите, например, ответ @Sonny. Быстрый тест скорости показывает, что прямой вызов функции в 22 раза быстрее, чем использованиеsapply
(хотя это не имеет значения, имеет лиx
какой-либо разумный размер, поскольку разница будет составлять наносекунды)
Ответ №3:
fn$
в gsubfn может использоваться для преобразования формулы в функцию. Если перед такой функцией, как identity
, ставится fn$
, то формула в аргументах будет преобразована в функцию, а затем будет запущена функция, которая fn$
предшествует. LHS формулы должна быть входной переменной функции или пустой. В последнем случае в качестве аргументов будут использоваться свободные переменные в RHS. RHS — это тело.
library(gsubfn)
fo[[2]] <- NULL # remove LHS
fun <- fn$identity(fo) # create function from formula
fun
## function (x)
## 2 3 * x x^2
fun(x)
## [1] 0.00000000 -0.16620499 -0.24376731 -0.23268698 -0.13296399 0.05540166
## [7] 0.33240997 0.69806094 1.15235457 1.69529086 2.32686981 3.04709141
## [13] 3.85595568 4.75346260 5.73961219 6.81440443 7.97783934 9.22991690
## [19] 10.57063712 12.00000000