在我的示例中,我有多個物件,我需要對它們應用一些功能mean。但函式呼叫不應包含list,它必須如下所示:my_function(a, b, d). 請建議如何做,可能我需要quoteor substitute,但我不確定如何使用它們。
a <- c(1:15)
b <- c(1:17)
d <- c(1:19)
my_function <- function(objects) {
lapply(objects, mean)
}
my_function(list(a, b, d))
uj5u.com熱心網友回復:
一個可能的解決方案:
a <- c(1:15)
b <- c(1:17)
d <- c(1:19)
my_function <- function(...) {
lapply(list(...), mean)
}
my_function(a, b, d)
#> [[1]]
#> [1] 8
#>
#> [[2]]
#> [1] 9
#>
#> [[3]]
#> [1] 10
uj5u.com熱心網友回復:
為了仍然能夠從mean諸如na.rm=和的其他論點中受益trim=,即概括地說,我們可以match使用formalArgs點并相應地拆分呼叫。
my_function <- function(...) {
cl <- match.call()
m <- match(formalArgs(base:::mean.default), names(cl), 0L)
vapply(as.list(cl)[-c(1L, m)], function(x) {
eval(as.call(c(quote(base:::mean.default), list(x), as.list(cl[m]))))
}, numeric(1L))
}
## OP's example
my_function(a, b, d)
# [1] 8 9 10
## generalization:
set.seed(42)
my_function(rnorm(12), rnorm(5), c(NA, rnorm(3)))
# [1] 0.7553736 -0.2898547 NA
set.seed(42)
my_function(rnorm(12), rnorm(5), c(NA, rnorm(3)), na.rm=TRUE)
# 0.7553736 -0.2898547 -1.2589363
set.seed(42)
my_function(rnorm(12), rnorm(5), c(NA, rnorm(3)), na.rm=TRUE, trim=.5)
# 0.5185655 -0.2787888 -2.4404669
資料:
a <- 1:15; b <- 1:17; d <- 1:19
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484914.html
上一篇:找出所有能被5整除的奇數
