Я работаю над функцией для вычисления одной числовой переменной (double). Он должен взять его компоненты из другого фрейма данных, в котором хранятся различные уравнения, которые разбиты на отдельные части (здесь я использую уравнения линейной регрессии, так что речь идет о наклоне и перехвате двух переменных / столбцов).
В зависимости от одного условия (имя / конкретная строка), которое также хранится в таблице уравнений, функция должна использовать наклон и перехват из той же строки.
Фактические входные данные для расчетов получены из другого кадра данных, хранящегося в числовом столбце.
Справочная информация: для каждого условия требуется другое уравнение, и их слишком много, чтобы объединить их в отдельные функции.
Полагаю, функция должна следовать следующей базовой схеме:
data_conversion(numeric_input_data, "equation_id")
Пытаясь найти решение в Интернете, я экспериментировал с формами функций apply, subset, ifelse и switch, но безуспешно.
В конце я был бы признателен за простой способ, пытаясь избежать петель и т. Д., Если это возможно.
#create dataframe with equation parameters
equation_id <- c("eq_1", "eq_2", "eq_3", "eq_4", "eq_5")
slope <- c(1.1627907, 1.6949153, 1.2658228, 0.9345794, 0.9433962)
intercept <- c(-26.4069767, -0.4067797, -27.3544304, -21.2336449, -22.9245283)
eq_df <- data.frame(equation_id, slope, intercept)
#create some test data
group <- c("A", "B", "C", "A")
iso_value_p <- c(14, 12, NA, 13.5)
data_df <- data.frame(group, iso_value_p)
#function [not working]; using iso_value as input for x
data_conversion <- function (x, choose_equation) {
switch(choose_equation,
eq_df[eq_df$equation_id == choose_equation, ] = {
res <- eq_df$slope * x + eq_df$intercept
}
)
return(res)
}
Функция должна работать следующим образом:
#for the first data row and the first equation
data_conversion(14.0, "eq_1")
#which should go like
1.1627907 * 14.0 + (- 26.4069767)
#result:
[1] -10.12791
#if I choose the second equation:
data_conversion(14.0, "eq_2")
#which should go like
1.6949153 * 14.0 + (-0.4067797)
#should give:
[1] 23.32203
####and using the whole dataset togehter with "eq_1" should give:
data_conversion(iso_value_p , "eq_1")
[1] -10.127907 -12.45349 NA -10.709302
Но мне не удалось заставить код работать - вышеприведенные примеры просто взяты из «ручных» вычислений отдельных значений.
(PS: я новичок в программировании и R, поэтому, пожалуйста, прости меня за мое относительно неточное описание или, если что-то забыл.)