Запустить функцию в цикле на фрейме данных из 3 значений - PullRequest
0 голосов
/ 03 марта 2019

Функция дана:

hmin = function (H,M,s) {
H - ((2*9.8*M)/1.5*s))
}

# Create a data frame to test One-at-A-Time sensitivity analysis
# Keep H and M constant, varying s
# H = 50, M = 70.5, s = 20 to 40
s1 <- numeric(length = 20)
s1 [1:21] <- c(20:40)

H1 <- c(rep(50,length(s1)))
M1 <- c(rep(70.5, length(s1)))

dataframe1 <- data.frame(H1,M1,s1)

Теперь с этим фреймом данных, Как запустить функцию hmin для переменных в dataframe1 и сохранить выходной hmin в векторе для построения графика.

Пробовал с помощью:

lapply(dataframe1, hmin (H1,M1,s1), dataframe1)

, но это не работает.

Любая помощь будет оценена.Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Мой предполагаемый вывод - просто возвращать значения hmin после запуска фрейма данных переменных с использованием функции и сохранения его в векторе.Как я могу сделать это?

Поскольку ваша функция векторизована, сделайте следующее:

result = hmin(H = dataframe1$H1, M = dataframe1$M1, s = dataframe1$s1)

# same thing, using the with() helper function to save typing
result = with(dataframe1, hmin(H = H1, M = M1, s = s1))
0 голосов
/ 03 марта 2019

Гораздо проще, если вы используете dplyr

> library(dplyr)
> dataframe1 <- data.frame(H1,M1,s1)
> hmin <- function(H,M,s) {
+   H - ((2*9.8*M)/1.5*s)
+ }
> dataframe1 %>%
+   mutate(hminscores = hmin(H1, M1, s1))
   H1   M1 s1 sensitivity
1  50 70.5 20    -18374.0
2  50 70.5 21    -19295.2
3  50 70.5 22    -20216.4
4  50 70.5 23    -21137.6
5  50 70.5 24    -22058.8
6  50 70.5 25    -22980.0
7  50 70.5 26    -23901.2
8  50 70.5 27    -24822.4
9  50 70.5 28    -25743.6
10 50 70.5 29    -26664.8
11 50 70.5 30    -27586.0
12 50 70.5 31    -28507.2
13 50 70.5 32    -29428.4
14 50 70.5 33    -30349.6
15 50 70.5 34    -31270.8
16 50 70.5 35    -32192.0
17 50 70.5 36    -33113.2
18 50 70.5 37    -34034.4
19 50 70.5 38    -34955.6
20 50 70.5 39    -35876.8
21 50 70.5 40    -36798.0

Если вам нужен только вектор, вы также можете использовать apply:

> hminscores <- apply(dataframe1, 1, function(x) {
+   hmin(x[1], x[2], x[3])
+ })
> hminscores
 [1] -18374.0 -19295.2 -20216.4 -21137.6 -22058.8 -22980.0 -23901.2 -24822.4 -25743.6
[10] -26664.8 -27586.0 -28507.2 -29428.4 -30349.6 -31270.8 -32192.0 -33113.2 -34034.4
[19] -34955.6 -35876.8 -36798.0
...