使用expand.grid数据框的行作为自定义函数的输入

时间:2019-01-08 15:41:16

标签: r

我有一个自定义函数,该函数带有6个变量的向量,并返回如下矩阵:

my_function <- (vect){
a=as.numeric(vect[1])
b=as.numeric(vect[2])
c=as.numeric(vect[3])
d=as.numeric(vect[4])
e=as.numeric(vect[5])
f=as.numeric(vect[6])
.
.(using other custom functions here)
.
return(matrix)
}

现在,我想对函数进行多个输入并获取矩阵列表。为了创建我需要的所有输入,我使用了expand.grid函数,例如:

> x=expand.grid(29,4:5,1,1,5,95)
> x
  Var1 Var2 Var3 Var4 Var5 Var6
1   29    4    1    1    5   95
2   29    5    1    1    5   95

因此,现在我想将此data.frame的每一行作为my_function的输入。我像这样尝试过do.call函数,但出现错误:

> y=do.call(my_function,x)
Error in (function (vect)  : 
   unused arguments (Var1 = c(29, 29), Var2 = 4:5, Var3 = c(1, 1), Var4 = 
c(1, 1), Var5 = c(5, 5), Var6 = c(95, 95))

我试图对我的数据框x进行转置,但出现相同的错误:

> y=do.call(my_function,as.data.frame(t(x)))
Error in (function (vect)  : 
  unused arguments (V1 = c(29, 4, 1, 1, 5, 95), V2 = c(29, 5, 1, 1, 5, 95))

我当然没有正确使用do.call函数,但我的想法已经用完了……有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

尝试将您的引导程序称为列表:

y=do.call(my_function,list(x))

为什么:?do.call

  

do.call根据名称或函数以及要传递给它的参数列表构造并执行函数调用。

如果我使用定义的函数运行它,例如:

do.call(rowmean,x)#of course there's an R function for that

然后:

  

(函数(x)中的错误:     未使用的参数(Var1 = c(29,29),Var2 = 4:5,Var3 = c(1,1),Var4 = c(1,1),Var5 = c(5,5),Var6 = c(95 ,95))

使用:

do.call(rowmean,list(x))

按预期工作。测试的唯一方法是是否提供了功能。