传递向量元素以作为连续参数调用
Passing vector elements to call as consecutive arguments
给定函数和测试向量:
multiply_stuff <- function(...) {
arguments <- list(...)
Reduce(f = `*`, x = arguments)
}
test_vec <- c(1, 20, 3, 40, 5, 60)
我想创建一个未计算的 call
自动列出传递的向量的所有参数。在这个例子中,这相当于表达式:
call("multiply_stuff",
test_vec[1],
test_vec[2],
test_vec[3],
test_vec[4],
test_vec[5],
test_vec[6])
尝试次数
例如对于向量:
test_vec_B <- c(1, 5, 6, 8, 9, 11, 12, 14, 20, 11)
我想自动列出 call("multiply_stuff",...)
中的所有 test_vec_B
个参数。这自然不行:
call("multiply_stuff", test_vec_B)
call("multiply_stuff", list(test_vec_B))
想要的结果
未计算的表达式等效于:
call(
"multiply_stuff",
test_vec_B[1],
test_vec_B[2],
test_vec_B[3],
test_vec_B[4],
test_vec_B[5],
test_vec_B[6],
test_vec_B[7],
test_vec_B[8],
test_vec_B[9],
test_vec_B[10]
)
您可以创建一个 call
对象,然后向其添加参数:
multiply_stuff <- function(...) {
arguments <- list(...)
Reduce(f = `*`, x = arguments)
}
test_vec_B <- c(1, 5, 6, 8, 9, 11, 12, 14, 20, 11)
get_call <- function(f, arg_vector){
my_call <- call(f)
my_call[2:(length(arg_vector) + 1)] <- arg_vector
return(my_call)
}
multiply_stuff(1, 5, 6, 8, 9, 11, 12, 14, 20, 11)
[1] 878169600
test_call <- get_call("multiply_stuff", test_vec_B)
eval(test_call)
[1] 878169600
说明:当您创建一个 call
对象时,您可以像往常一样通过索引 access/modify 函数及其参数。索引 1 是函数调用,从 2 开始的索引是 arguments.Run 以验证:
test_call2 <- call("sum", 1, 2)
test_call2[1]
test_call2[2]
test_call2[3]
eval(test_call2)
test_call2[3] <- 1234
eval(test_call2)
给定函数和测试向量:
multiply_stuff <- function(...) {
arguments <- list(...)
Reduce(f = `*`, x = arguments)
}
test_vec <- c(1, 20, 3, 40, 5, 60)
我想创建一个未计算的 call
自动列出传递的向量的所有参数。在这个例子中,这相当于表达式:
call("multiply_stuff",
test_vec[1],
test_vec[2],
test_vec[3],
test_vec[4],
test_vec[5],
test_vec[6])
尝试次数
例如对于向量:
test_vec_B <- c(1, 5, 6, 8, 9, 11, 12, 14, 20, 11)
我想自动列出 call("multiply_stuff",...)
中的所有 test_vec_B
个参数。这自然不行:
call("multiply_stuff", test_vec_B)
call("multiply_stuff", list(test_vec_B))
想要的结果
未计算的表达式等效于:
call(
"multiply_stuff",
test_vec_B[1],
test_vec_B[2],
test_vec_B[3],
test_vec_B[4],
test_vec_B[5],
test_vec_B[6],
test_vec_B[7],
test_vec_B[8],
test_vec_B[9],
test_vec_B[10]
)
您可以创建一个 call
对象,然后向其添加参数:
multiply_stuff <- function(...) {
arguments <- list(...)
Reduce(f = `*`, x = arguments)
}
test_vec_B <- c(1, 5, 6, 8, 9, 11, 12, 14, 20, 11)
get_call <- function(f, arg_vector){
my_call <- call(f)
my_call[2:(length(arg_vector) + 1)] <- arg_vector
return(my_call)
}
multiply_stuff(1, 5, 6, 8, 9, 11, 12, 14, 20, 11)
[1] 878169600
test_call <- get_call("multiply_stuff", test_vec_B)
eval(test_call)
[1] 878169600
说明:当您创建一个 call
对象时,您可以像往常一样通过索引 access/modify 函数及其参数。索引 1 是函数调用,从 2 开始的索引是 arguments.Run 以验证:
test_call2 <- call("sum", 1, 2)
test_call2[1]
test_call2[2]
test_call2[3]
eval(test_call2)
test_call2[3] <- 1234
eval(test_call2)