2013-10-23 50 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 - 用適當的對名稱標記,所以我仍然在爲如何實現這一點而戰。 –