R 从子函数中的父函数求值函数
假设我有一个函数:R 从子函数中的父函数求值函数,r,eval,parent-child,R,Eval,Parent Child,假设我有一个函数: MyFunction=function(x,y,z,thelist){ a = x+3 b = y+4 c = z+2 mylist=thelist myfunc1=function(form=a) a+2 myfunc2=function(form=b) b+2 myfunc3=function(form=c) c+2 functi
MyFunction=function(x,y,z,thelist){
a = x+3
b = y+4
c = z+2
mylist=thelist
myfunc1=function(form=a) a+2
myfunc2=function(form=b) b+2
myfunc3=function(form=c) c+2
function(...){
.x = as.list(substitute(list(...)))[-1]
CombinedList = lapply(seq_along(mylist), function (y,.x) {
numbercols = length(eval(.x[[1]])(form=eval(formals(eval(.x[[1]]))$form))[[1]])
numbercolsplusone = numbercols+1
elementz = matrix(NA,nrow=length(.x),ncol=numbercolsplusone)
for (i in seq_along(.x)) {
elementz[i,1:numbercols] = eval(.x[[i]])(form=eval(formals(eval(.x[[i]]))$form))[[y]]
elementz[i,numbercolsplusone] = substr(as.character(.x[[i]]),1,nchar(as.character(.x[[i]]))-4)
}
....
Some more calculations....
....
},.x)
return(CombinedList)
}
}
然后,我从父函数
中选择,比如说myfunc1
和myfunc2
,并调用我的玩具函数:
MyFunction=function(x,y,z,thelist){
a = x+3
b = y+4
c = z+2
mylist=thelist
myfunc1=function(form=a) a+2
myfunc2=function(form=b) b+2
myfunc3=function(form=c) c+2
function(...){
.x = as.list(substitute(list(...)))[-1]
CombinedList = lapply(seq_along(mylist), function (y,.x) {
numbercols = length(eval(.x[[1]])(form=eval(formals(eval(.x[[1]]))$form))[[1]])
numbercolsplusone = numbercols+1
elementz = matrix(NA,nrow=length(.x),ncol=numbercolsplusone)
for (i in seq_along(.x)) {
elementz[i,1:numbercols] = eval(.x[[i]])(form=eval(formals(eval(.x[[i]]))$form))[[y]]
elementz[i,numbercolsplusone] = substr(as.character(.x[[i]]),1,nchar(as.character(.x[[i]]))-4)
}
....
Some more calculations....
....
},.x)
return(CombinedList)
}
}
try = Myfunction(x,y,z,thelist)(myfunc1,myfunc2)
这是一个toyfunction,我的真实函数要长得多,计算起来要花很多时间。我想问题在于子函数中的for循环——可能是我使用的eval
与其他类似函数相比,此函数的计算时间更长,不同之处在于,我先调用父函数中的所有函数,然后再调用子函数,function(…){
。并且不选择此玩具示例中的函数
还有其他更快捷的方法吗?@joran谢谢!有什么建议吗?我编辑只是为了让它可读。我完全不明白你在问什么。我必须同意。似乎很多代码都是多余的,没有用例,不清楚目标是什么。在R-help上,Jim Holtman的标记行是顺理成章的“不要告诉我你是如何失败的;告诉我应该做什么。”@DWin谢谢你的评论!我正在编写一个函数来分析时间序列数据。上面的代码旨在从父函数中选择一些特定函数到子函数
函数(…){}
。这些特定函数采用不同的形式默认参数。因此,子函数中的eval
会计算这些默认参数。它工作正常,但速度非常慢。因此,我想我可以在这里询问R向导:)