0

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

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

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

谢谢

4

1 回答 1

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

请注意,我正在跟随您的引导并通过引用 vector 中的特定元素来索引mydata我的角色nm的列。(我没有调用它,names因为这是一个非常常见的功能。)但是你可以很容易地直接通过位置使用ij直接索引它们,假设列是你想要的顺序。

于 2013-10-23T20:34:59.730 回答