接受因子和数值输入的函数
Function that accepts factor and numerical inputs
我正在使用 R 编程语言。我正在尝试优化一个可以接受数字和因子输入的函数。
为了优化,我使用 GA 库。
我的参考文献:demo, actual Library, specific function I'm using
假设我有一个如下所示的函数:
my_function <- function(r1, r2) {
#define function here, e.g:
#this "select" can be done using "dplyr" or SQL part1 <- SELECT * FROM
my_data WHERE (col_1 IN r1) AND (col_2 > r2)
part2<- mean(part1$col_3)
}
在这个例子中:
r1
可以取 a, b, c, d
(因子变量)的任何 group
个值,
例如r1 = a
、r1 = a,d
、r1 = b,c,a
、r1 = c
、r1 = a,b,c,d
等
r2
可以取 1 到 100 之间的单个值(数字变量)
my_data
是一个有3列的数据集:col_1
(因子,只能取值a, b, c, d
),col_2
(数值),col_3
(数字)
my_data
将根据 r1
和 r2
进行“子集化”
-
col_3
的 mean
是 my_function
将 return 给定 r1
和 r2
[=66 的选择的值=]
col_3
的 mean
将是我尝试优化的值,以便选择 r1
和 r2
问题: 目前,我正在尝试使用 R 中的 ga
函数优化 my_function
:
library(GA)
GA <- ga(type = "real-valued",
fitness = function(x) my_function(x[1], x[2]),
lower = c(c("a", "b", "c", "d"), 1), upper = c(c("a", "b", "c", "d"), 100),
popSize = 50, maxiter = 1000, run = 100)
但我不确定如何正确设置它。
我不确定如何正确定义 my_function
,我也不确定如何正确定义 GA。
我想你正在寻找这样的东西:
library("dplyr")
df <- data.frame(a = rep(letters[1:3], each=2),
b = rep(c(1,9), 3),
c = 1:6)
df
#> a b c
#> 1 a 1 1
#> 2 a 9 2
#> 3 b 1 3
#> 4 b 9 4
#> 5 c 1 5
#> 6 c 9 6
my_subset_mean <- function(r1, r2){ ## Assumes an object `df` with cols a|b|c
subset <- df %>% filter(a %in% r1, b > r2)
return(mean(subset$c))
}
my_subset_mean(r1 = c("a"), r2 = 5) ## ~mean(2)
#> [1] 2
my_subset_mean(r1 = c("a", "b"), r2 = 0) ## ~mean(1:4)
#> [1] 2.5
my_subset_mean(r1 = c("a", "b"), r2 = 10) ## ~mean of df with 0 rows
#> [1] NaN
由 reprex package (v2.0.0)
于 2021-09-25 创建
我正在使用 R 编程语言。我正在尝试优化一个可以接受数字和因子输入的函数。
为了优化,我使用 GA 库。
我的参考文献:demo, actual Library, specific function I'm using
假设我有一个如下所示的函数:
my_function <- function(r1, r2) {
#define function here, e.g:
#this "select" can be done using "dplyr" or SQL part1 <- SELECT * FROM
my_data WHERE (col_1 IN r1) AND (col_2 > r2)
part2<- mean(part1$col_3)
}
在这个例子中:
r1
可以取a, b, c, d
(因子变量)的任何group
个值,
例如r1 = a
、r1 = a,d
、r1 = b,c,a
、r1 = c
、r1 = a,b,c,d
等r2
可以取 1 到 100 之间的单个值(数字变量)my_data
是一个有3列的数据集:col_1
(因子,只能取值a, b, c, d
),col_2
(数值),col_3
(数字)my_data
将根据r1
和r2
进行“子集化”
-
col_3
的mean
是my_function
将 return 给定r1
和r2
[=66 的选择的值=] col_3
的mean
将是我尝试优化的值,以便选择r1
和r2
问题: 目前,我正在尝试使用 R 中的 ga
函数优化 my_function
:
library(GA)
GA <- ga(type = "real-valued",
fitness = function(x) my_function(x[1], x[2]),
lower = c(c("a", "b", "c", "d"), 1), upper = c(c("a", "b", "c", "d"), 100),
popSize = 50, maxiter = 1000, run = 100)
但我不确定如何正确设置它。
我不确定如何正确定义 my_function
,我也不确定如何正确定义 GA。
我想你正在寻找这样的东西:
library("dplyr")
df <- data.frame(a = rep(letters[1:3], each=2),
b = rep(c(1,9), 3),
c = 1:6)
df
#> a b c
#> 1 a 1 1
#> 2 a 9 2
#> 3 b 1 3
#> 4 b 9 4
#> 5 c 1 5
#> 6 c 9 6
my_subset_mean <- function(r1, r2){ ## Assumes an object `df` with cols a|b|c
subset <- df %>% filter(a %in% r1, b > r2)
return(mean(subset$c))
}
my_subset_mean(r1 = c("a"), r2 = 5) ## ~mean(2)
#> [1] 2
my_subset_mean(r1 = c("a", "b"), r2 = 0) ## ~mean(1:4)
#> [1] 2.5
my_subset_mean(r1 = c("a", "b"), r2 = 10) ## ~mean of df with 0 rows
#> [1] NaN
由 reprex package (v2.0.0)
于 2021-09-25 创建