BA
Size: a a a
BA
IS
ff(df$a, df$b)
должно формироваться программным образом. Есть только df
с произвольным составом колонок.IS
ff <- function(x, ...){}
# надо
ff(x = 5, df$a, df$b, df$c)
PD
IS
AP
IS
PD
# create random situation
df <- as.data.frame(matrix(data = rnorm(100), ncol = 10))
names(df) <- c('A', sample(LETTERS[2:length(LETTERS)], 9, FALSE))
# user selects columns
my_cols <- c("A", # obligatory, known apriori
names(df)[names(df) > 'M'] # some logic to choose cols
)
# example of a function with arbitrary args
do.call(
cbind,
df[, my_cols]
)
BA
df <- data.frame(a = 1:4, b = 5:8, c = 9:12)
ff <- function(df.name = 'df', colnames)
{
df2 <- get(df.name)
cur_columns <- paste0("c('", glue_collapse(colnames, "', '"), "')")
tmp <- df2[, eval(parse(text=cur_columns))]
return(tmp)
}
# Произвольный список колонок
col_list <- c('b', 'c')
ff(df.name = 'df', colnames = col_list)
ff(df.name = 'df', colnames = c('c'))
ff(df.name = 'df', colnames = c('c', 'a'))
ff(df.name = 'df', colnames = c('c', 'a', 'b'))
IS
AP
BA
BA
IS
ff(x, ...)
, которая принимает опциональные параметры через ...
df <- data.frame(a = 1:4, b = 5:8, c = 9:12)
Т.е. хочется программным образом получить вызов ff(x, df$a, df$b, df$c)
.df <- data.frame(a = 1:4, b = 5:8, c = 9:12)
# хочется получить вызов ff(df$a, df$b, df$c)
ff <- function(x, ...){
dots1 <- list(...)
dots2 <- rlang::list2(...)
identical(dots1, dots2)
browser()
}
# для комбинаций явных и неявных параметров делаем repack для подхвата значений в `...`
# вариант 1
do.call("ff", c(x = 2, df))
# вариант 2
rlang::exec("ff", x = 2, !!!df)
AP
Я
AS
A
ГД
IS
ff(...)
сложная, кроме ...
есть еще масса обязательных параметров, которые имеют разные типы и надо конструировать различным образом.