[英]How can i find the sum of a list of functions in R?
所以我有一個函數列表。我想創建一個for循環,將其總和返回(顯然作為函數)。
為了在for循環中創建函數列表,我正在使用此代碼
##CODE
f=dnorm
h=function(x){log(f(x))}
S=c(-3,-2,-1,0,1,2,3)
K=matrix(rep(1:length(S),2),ncol=2)
for(i in 1:length(S)){
K[i,]=c(S[i],h(S[i]))
}
funcs=list()
## LOOP TO DEFINE THE LINES
for(i in 1:6){
## Make function name
funcName <- paste( 'hl', i,i+1, sep = '' )
## Make function
func1 = paste('function(x){ (K[',i,'+1,2]-K[',i,',2])/(K[',i,'+1,1]-K[',i,',1])*x+
K[',i,'+1,2]-((K[',i,'+1,2]-K[',i,',2])/(K[',i,'+1,1]-K[',i,',1]))*K[',i,'+1,1]}',sep
= '')
funcs[[funcName]] = eval(parse(text=func1))
}
這將創建6個功能的列表。 我如何獲得他們的款項? 我嘗試使用apply命令,但是語法不正確或它們不起作用。
PS我實際上是在嘗試為ars命令編寫我的一個代碼。
正如尼克指出的那樣,“功能的總和”是沒有意義的。 我在瘋狂地猜測,您想在某個時候(在S
?處)對函數求值,然后取這些值的總和。 這應該可以解決問題。
rowSums(sapply(funcs, function(f) f(S)))
您的許多代碼都可以用矢量化的方式編寫得更干凈。
f <- dnorm
h <- function(x) log(f(x))
S <- -3:3
K <- cbind(S, h(S)) #No need to define this twice; no need to use a loop
i <- seq_len(6)
funcNames <- paste('hl', i, i+1, sep = '') #paste is vectorised
#You can avoid using `paste`/`eval`/`parse` with this function to create the functions
#Can possibly be done even more cleanly by using local
makeFunc <- function(i)
{
evalq(substitute(
function(x)
{
(K[i + 1, 2] - K[i, 2]) / (K[i + 1, 1] - K[i, 1]) * x +
K[i + 1, 2] -
((K[i + 1, 2] - K[i, 2]) / (K[i + 1, 1] - K[i, 1])) * K[i + 1, 1]
},
list(i = i)
))
}
funcs <- lapply(i, makeFunc)
names(funcs) <- funcNames
rowSums(sapply(funcs, function(f) f(S)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.