【发布时间】:2019-11-05 03:29:21
【问题描述】:
假设我有一个 R 函数,例如下面的 foo。此函数有 4 个固定参数,以及在... 中定义的任意数量的任意参数。
foo 参数的所有输入值都存储在 THIS CSV 文件中。
在下面的代码中,我可以在 lapply 循环中使用从 CSV 文件导入的 4 个固定参数成功运行 foo。 但是我想知道如何在lapply 命令中插入... 中定义的参数?
foo <- function(n = NULL, r = NULL, post, control, ...){ ## the function
data.frame(n = n, r = r, post, control, ...)
}
D <- read.csv("https://raw.githubusercontent.com/izeh/i/master/j.csv", h = T) # CSV file
L <- split(D, D$study.name) ; L[[1]] <- NULL
# the fixed args values:
n <- lapply(1:length(L), function(i) L[[i]]$n)
r <- lapply(1:length(L), function(i) L[[i]]$r)
post <- lapply(1:length(L), function(i) L[[i]]$post)
control <- lapply(1:length(L), function(i) L[[i]]$control)
# names of args defined in `...`:
dot.names <- names(L[[1]])[!names(L[[1]]) %in% formalArgs(foo)][-1]
# the `...` args values:
a <- lapply(dot.names, function(i) lapply(L, function(j) j[grep(i, names(j))]))
## RUN `foo` function:
lapply(1:length(L), function(i) foo(n = n[[i]], r = r[[i]], post = post[[i]],
control = control[[i]])) # BUT! how can I insert the
# arguments defined in `...`
# in the function?
【问题讨论】:
-
如果您使用了这么多
lapply调用,可能是时候编写一个函数了。dots在函数中更容易使用。 -
从之前的帖子,不得不稍作改动。请检查
base R的更新
标签: r function loops dataframe lapply