我如何紧凑地将多个符号参数传递给函数?
how do i compactly pass multiple symbol arguments into a function?
我创建了一个虚拟数据框 (df),并希望为数据框中每次出现的 'col_x' 派生一个新列。
我创建了一个执行此操作的函数,尽管它需要输入每个列的名称 derived/derived 来自,如示例 1 所示。
如果我有大量的列,这看起来会很乱。我想做一些类似于示例 2 的事情,我可以将一个向量(示例中的 arg)传递给函数。
示例 2 实际上不起作用,因为我在向量中使用了字符串。我想我可能需要一个符号向量?不过我不确定这是否可行。
df <- data.frame(numbers = rep(5, 10), col_1 = sample(1:10, 10), col_2 = sample(1:10, 10), col_3 = sample(1:10, 10))
my_fun <- function(...){
captured_expressions <- enexprs(...)
len <- length(captured_expressions) / 2
for(x in 1:len){
y <- x + 3
df <- df %>% mutate(!!captured_expressions[[y]] := !!captured_expressions[[x]] + numbers)
}
print(df)
}
# example 1:
my_fun(col_1, col_2, col_3, col_1_derived, col_2_derived, col_3_derived)
arg <- append(paste0('col_', 1:3),
paste0('col_', 1:3, '_derived'))
# example 2:
my_fun(arg)
这是否回答了您的问题?
plouf <- paste(paste0('col_', 1:3,collapse = ","),
paste0('col_', 1:3, '_derived',collapse = ","),
collapse = ",")
# example 2:
my_fun(eval(parse(text = "plouf")))
我创建了一个字符串作为你函数的参数求值
我已经使用一个我不知道的名为 as.symbol 的函数解决了这个问题。
my_fun <- function(...){
len <- length(...) / 2
for(x in 1:len){
y <- x + 3
df <- df %>% mutate(!!as.symbol(...[y]) := !!as.symbol(...[x]) + numbers)
}
print(df)
}
我创建了一个虚拟数据框 (df),并希望为数据框中每次出现的 'col_x' 派生一个新列。
我创建了一个执行此操作的函数,尽管它需要输入每个列的名称 derived/derived 来自,如示例 1 所示。
如果我有大量的列,这看起来会很乱。我想做一些类似于示例 2 的事情,我可以将一个向量(示例中的 arg)传递给函数。
示例 2 实际上不起作用,因为我在向量中使用了字符串。我想我可能需要一个符号向量?不过我不确定这是否可行。
df <- data.frame(numbers = rep(5, 10), col_1 = sample(1:10, 10), col_2 = sample(1:10, 10), col_3 = sample(1:10, 10))
my_fun <- function(...){
captured_expressions <- enexprs(...)
len <- length(captured_expressions) / 2
for(x in 1:len){
y <- x + 3
df <- df %>% mutate(!!captured_expressions[[y]] := !!captured_expressions[[x]] + numbers)
}
print(df)
}
# example 1:
my_fun(col_1, col_2, col_3, col_1_derived, col_2_derived, col_3_derived)
arg <- append(paste0('col_', 1:3),
paste0('col_', 1:3, '_derived'))
# example 2:
my_fun(arg)
这是否回答了您的问题?
plouf <- paste(paste0('col_', 1:3,collapse = ","),
paste0('col_', 1:3, '_derived',collapse = ","),
collapse = ",")
# example 2:
my_fun(eval(parse(text = "plouf")))
我创建了一个字符串作为你函数的参数求值
我已经使用一个我不知道的名为 as.symbol 的函数解决了这个问题。
my_fun <- function(...){
len <- length(...) / 2
for(x in 1:len){
y <- x + 3
df <- df %>% mutate(!!as.symbol(...[y]) := !!as.symbol(...[x]) + numbers)
}
print(df)
}