【问题标题】:How can i find the sum of a list of functions in R?如何在 R 中找到函数列表的总和?
【发布时间】:2011-09-15 06:29:35
【问题描述】:

所以我有一个函数列表。我想创建一个 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 命令,但我的语法不正确或者它们不起作用。

P.S 我实际上是在尝试为 ars 命令编写一个代码。

【问题讨论】:

  • 函数之和是什么意思?一个计算其和数的计算总和的函数?
  • 你能用自然语言解释一下这段代码应该做什么吗?为什么需要以如此曲折的方式构造函数?你不能简单地使用普通函数定义来定义函数吗?
  • 我也不明白你想做什么。但是,如果你想从你的函数中得到一个值(总和?),你必须给它们一个数值。例如:funcs$hl12(1) 返回 4.58106。
  • 你真的不需要在你的问题中使用这么多?!

标签: list function r sum


【解决方案1】:

正如尼克指出的那样,“函数的总和”没有意义。我疯狂地猜测你想在某个时候评估函数(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)))

【讨论】:

    猜你喜欢
    • 2013-03-31
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2023-03-24
    • 2014-06-12
    相关资源
    最近更新 更多