在lapply
中使用R
时,我有一个关于将多个参数传递给函数的问题。
当我使用lapply语法lapply(input, myfun);
时 - 这很容易理解,我可以这样定义myfun:
myfun <- function(x) {
# doing something here with x
}
lapply(input, myfun);
和input
的元素作为x
参数传递给myfun
。
但是如果我需要将更多参数传递给myfunc
怎么办?例如,它的定义如下:
myfun <- function(x, arg1) {
# doing something here with x and arg1
}
如何将此函数用于传递input
个元素(如x
参数)和其他一些参数?
答案 0 :(得分:92)
如果您查看帮助页面,lapply
的其中一个参数就是神秘的...
。当我们查看帮助页面的Arguments部分时,我们会找到以下行:
...: optional arguments to ‘FUN’.
所以你要做的就是在lapply
调用中包含你的另一个参数作为参数,如下所示:
lapply(input, myfun, arg1=6)
和lapply
,认识到arg1
不是它知道如何处理的参数,会自动将其传递给myfun
。所有其他apply
函数都可以执行相同的操作。
附录:您也可以在编写自己的函数时使用...
。例如,假设您编写了一个在某个时刻调用plot
的函数,并且您希望能够从函数调用中更改绘图参数。您可以在函数中包含每个参数作为参数,但这很烦人。相反,你可以使用...
(作为你的函数和在其中绘图的调用的参数),并且让你的函数无法识别的任何参数自动传递给plot
。
答案 1 :(得分:14)
正如Alan所建议的,函数'mapply'将函数应用于多个多个列表或向量参数:
var button_clicked = false;
$('#button_create_product').click( function() {
if (button_clicked) {
$('.dialog_create_product').dialog('open');
}
});
$( ".dialog_create_product" ).dialog({
autoOpen: false,
width: 800,
buttons: {
OK: function() {
$(".dialog_create_product").dialog("close")
},
CANSEL: function() {
$(".dialog_create_product").dialog("close")
}
},
});
$("#btn3").click(function() {
$('#menu').load("products.jsp",function () {
button_clicked = true;
});
});
参见手册页: https://stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html
答案 2 :(得分:7)
您可以通过以下方式完成此操作:
myfxn <- function(var1,var2,var3){
var1*var2*var3
}
lapply(1:3,myfxn,var2=2,var3=100)
你会得到答案:
[[1]] [1] 200
[[2]] [1] 400
[[3]] [1] 600
答案 3 :(得分:1)
myfun <- function(x, arg1) {
# doing something here with x and arg1
}
x
是向量或列表,myfun
中的lapply(x, myfun)
被分别x
的每个元素调用。
选项1
如果您想在每个arg1
调用中使用整个myfun
(myfun(x[1], arg1)
,myfun(x[2], arg1)
等),请使用lapply(x, myfun, arg1)
(如上所述) )。
选项2
但是,如果您想将myfun
的每个元素与arg1
的元素(x
,myfun(x[1], arg1[1])
等)分别调用myfun(x[2], arg1[2])
,无法使用lapply
。而是使用mapply(myfun, x, arg1)
(如上所述)或apply
:
apply(cbind(x,arg1), 1, myfun)
或
apply(rbind(x,arg1), 2, myfun).