do.callin R-Kaggle启动脚本

do.callin R-Kaggle启动脚本,r,kaggle,R,Kaggle,当我在浏览Kaggle竞赛的初学者R脚本时,我看到创建这个函数是为了找到所有行的总和。代码如下: #Function to sum across rows for variables defined psum <- function(..., na.rm = FALSE) { rowSums(do.call(cbind, list(...)), na.rm = na.rm) } 有人能解释一下这个函数是怎么回事吗 另外,这与仅使用行和有什么区别?它创建了一个名为psum的函数,

当我在浏览Kaggle竞赛的初学者R脚本时,我看到创建这个函数是为了找到所有行的总和。代码如下:

#Function to sum across rows for variables defined
psum <- function(..., na.rm = FALSE) {
     rowSums(do.call(cbind, list(...)), na.rm = na.rm)
}
有人能解释一下这个函数是怎么回事吗


另外,这与仅使用行和有什么区别?

它创建了一个名为psum的函数,可以接受任何内容。。。和na.rm参数。 这是传递给do.call和所有传递给。。。正在作为列表传递。本质上,do.call将查找传入的任何内容。。。具有对cbind有效的所有限制。如果某个值恰好为NA,则该值将被删除。或者不,取决于na.rm值。

实际执行。不需要调用。它本来可以也应该用这样一种更简单的方式来写:

psum2 <- function(..., na.rm = FALSE) rowSums(cbind(...), na.rm = na.rm)

psum2(BOD, BOD)
# [1] 18.6 24.6 44.0 40.0 41.2 53.6

psum(BOD, BOD) # same
# [1] 18.6 24.6 44.0 40.0 41.2 53.6
但是在第一种情况下,我们可以动态地创建L,这样它就可以有任意数量的参数,而第二种情况则硬编码为三个参数

例如,该代码可以通过改变n来改变,其中n可以是1,2,3,…:

n <- 3
L <- lapply(1:n, function(i) i * BOD) # create list of n components

rowSums(do.call(cbind, L))
[1]  55.8  73.8 132.0 120.0 123.6 160.8

你看了吗?do.call帮助页面?您看到传递给psum函数的对象类型了吗?谢谢!!那有帮助!!
f(arg1, arg2, arg3)
n <- 3
L <- lapply(1:n, function(i) i * BOD) # create list of n components

rowSums(do.call(cbind, L))
[1]  55.8  73.8 132.0 120.0 123.6 160.8
rowSums(cbind(BOD, 2*BOD, 3*BOD)) # hard coded
[1]  55.8  73.8 132.0 120.0 123.6 160.8