R / Splus:使用不同的变量重复运行一组函数

时间:2013-10-23 19:43:25

标签: r function apply

我希望能够在一组配对变量中重复运行相同的函数。我已阅读其他帖子,他们建议使用lapply函数来执行此类过程,但在这种情况下我无法使用它,可能是因为我对如何实现适当的“应用”的理解有限。

这是我的代码。你可以看到它正确地创建了运行函数的文本(保存在formula.ccf和formulas.lagplot中)和适当的赋值变量(保存在varnames中),但是我如何实现这些函数并将它们分配给相应的varname ?

names <- c("aran", "galv", "cc", "sa") #Names of the data vectors
cntr=1

varname <- array("",dim=c(9))
formulas.ccf <- array("",dim=c(9))
formulas.lagplot <- array("",dim=c(9))
for (i in 1:3){
 for (j in 2:4) {
  varname[cntr] <- paste("ccf",names[i],names[j],sep="_")
  formulas.ccf[cntr] <- paste("ccf(mydata$",names[i],", mydata$",names[j],",na.action=na.pass)",sep="")
  formulas.lagplot[cntr] <- paste("lagplot2(mydata$",names[i],", mydata$",names[j],",15)",sep="")
  cntr<-cntr+1
  }
  }

 varname 
 formulas.ccf 
 formulas.lagplot

这里有一组我希望运行的代码;对于这个例子,varname =“ccf_aran_galv”,ccf function =“ccf(mydata $ aran,mydata $ galv,na.action = na.pass)”和lagplot function =“lag.plot2(mydata $ aran_perc,mydata $ galv_perc) ,15)“。这段代码将运行9次,每对变量一次:

ccf_aran_galv <- ccf(mydata$aran, mydata$galv,na.action=na.pass)
lag.plot2(mydata$aran_perc, mydata$galv_perc, 15)

我被困住了,所以感谢任何人的帮助。我显然可以反复写出这段代码,但希望有更小的编码空间和更高的灵活性。

由于

1 个答案:

答案 0 :(得分:3)

即使你的例子不是完全可重复的,我也会试着指出你正确的方向。

如果您正在构建R代码作为字符串,希望然后执行它,这是一个很大的标志,你做错了。有时候这是必要的,但它们很少见。

此处的另一个警告铃声是$。还有其他(更好)方法可以引用数据框列:[[[。见?Extract。例如,让我们看看你试图在这里执行的ccf次调用系列。这将是一种简单的方法:

#Assuming that mydata is a data frame with 4 columns
# named "aran", "galv", "cc", "sa".
results <- vector("list",9)
nm <- c("aran", "galv", "cc", "sa")
counter <- 1
for (i in 1:3){
    for (j in 2:4){
        results[[counter]] <- ccf(mydata[,nm[i]],mydata[,nm[j]],na.action = na.pass)
        counter <- counter + 1
    }
}

请注意,我正在关注您的主角,并通过引用向量mydata中的特定元素为nm我的字符的列编制索引。 (我没有将其称为names,因为这是一个非常常见的功能。)但是,您可以直接使用ij直接按位置对其进行索引,假设列位于你想要的订单。