[英]R - how do I run each function in a list of functions with parameters given by a vector
[英]How do I define a list/vector of functions in R?
我有一個函數,將另一個函數作為輸入變量,例如。
WrapperFunction <- function(x, BaseFunction){
y <- cor(x)
BaseFunction(y)
}
現在,我想在此WrapperFunction中輸入各種BaseFunction,以產生輸出向量,但是如何定義函數列表,這樣我可以手動使用for循環使過程自動化,而不是手動插入每個函數:
for (i in 1:n){
output[i] <- WrapperFunction(x, FunctionList[i])
}
我嘗試定義
FunctionList <- list()
FunctionList[1] = Function1 , etc....
,這沒有用。
定義也沒有
FunctionList <- c("Function1", "Function2", ...)
我不確定您使用的x
值是多少,我想它是一個矩陣。 您可以將一些函數放入列表中,然后使用lapply
。
例如
m <- matrix(1:6, 2)
lst <- list(cov, diff)
lapply(lst, WrapperFunction, x = m)
#[[1]]
# [,1] [,2] [,3]
#[1,] 1.848893e-32 -6.162976e-33 -6.162976e-33
#[2,] -6.162976e-33 1.848893e-32 -6.162976e-33
#[3,] -6.162976e-33 -6.162976e-33 1.848893e-32
#
#[[2]]
# [,1] [,2] [,3]
#[1,] -2.220446e-16 2.220446e-16 0.000000e+00
#[2,] 0.000000e+00 -2.220446e-16 2.220446e-16
另外,如@nrussell所建議,您可以向量化BaseFunction
參數,該參數與上述操作基本相同。
vWF <- Vectorize(WrapperFunction, vectorize.args = "BaseFunction")
vWF(m, lst)
這將產生與上述相同的結果。
如果您想獲得功能列表,可以執行以下操作:
myFuns <- list(mean, sd)
然后,您可以將lapply
在此列表上,或者根據需要使用for
循環。 如果使用for
循環,請確保使用[[
語法,因為這確保您要檢索的是函數而不是長度為1的列表:
for (i in 1:n){
output[i] <- WrapperFunction(x, myFuns[[i]])
}
要么
lapply(myFuns, WrapperFunction, x = x)
稍微不同的方式,希望這能回答您的問題...
## Function 1
fun1 <-function(a)
{
a = a+a
return(a)
}
## Function 2
fun2 <- function(a)
{
a = a*a
return(a)
}
## Function 3
fun3 <- function(a)
{
a = a^a
return(a)
}
## Vector of function names
funlist <- c("fun1","fun2","fun3")
## Main Wrapper fnction
mainfun <- function(x,funlist)
{
y = cor(x[,1],x[,2])
res=NULL
for(i in 1:length(funlist))
{
k <- eval(parse(text=paste(funlist[i],"(a=",y,")",sep="")),env=.GlobalEnv)
res <- c(res,k)
}
return(c(y,res))
}
#############
x=cbind(c(1:100),c(101:200))
mainfun(x,funlist)
[1] 1 2 1 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.