2013-10-23 46 views
0

我希望能够通过一套配对变量重复运行相同的函数。我已经阅读过其他文章,并且他们建议使用lapply函数来完成这个过程,但是由于我对如何实施适当的“应用”的理解有限,我无法在这种情况下工作。R/Splus:使用不同变量重复运行一组函数

这是我的代码。您可以看到它正确地创建了运行函数的文本(保存在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函数=“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) 

我卡住了,所以希望得到任何人的帮助。我可以反复写出这段代码,但希望有更小的编码足迹和更大的灵活性。

感谢

回答

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 
    } 
} 

请注意,我跟随引导,并参照特定元素的矢量nm索引的mydata字符列。 (我没把它叫做names,因为这是一个非常常见的功能。)但是你可以直接使用ij直接按位置索引它们,假设列的顺序是你想要的。

+0

你可能想要为'(j在(i + 1):4)'中跳过自对和重复对。 –

+0

好吧,所以这段代码的确让我比我更进一步。猜猜我会深入挖掘数据框,以便了解如何将每个CCF与一个标签相关联。另外,我试图将每对的图形输出发送到它自己的PDF - 用适当的对名称标记,所以我仍然在为如何实现这一点而战。 –