2017-08-01 89 views
0

我有一個程序,該程序應該創建一個給定csv活動和時間的動作圖的pdf文件。我需要遍歷多個活動列,每個主題一個。第一項活動列爲列3.下面是相關代碼:如何給循環中的公式值

pdf("All Actograms.pdf") 
for(i in 3:(length(dat) - 1)) { 
    activity <- colnames(dat)[i] 

    # Plot the actogram 
    print(actogram(activity~datetime, dat=dat, col="black", main=colnames(dat)[i], strip.left.format="%m/%d", doublePlot = TRUE, scale=0.75)) 
} 
dev.off() 

當我打電話給我的actogram功能,我得到的錯誤「非數值參數二元運算符。」問題是公式「activity〜datetime」,因爲datetime是一個列名,活動也應該是這樣。如果我在循環中嘗試一下,使用活動列的名稱而不是包含名稱的變量,它可以正常工作。在調試時,我發現actogram函數正在接收字符串「activity」,而不是變量activity。我不太懂公式,但我想知道是否有任何方法可以完成我想要做的事情,這是通過許多列循環,每次調用實例圖函數時在「〜」之前更改列。我對R很新。

謝謝!

+0

一個簡單的方法是添加'dat $ Yvar < - dat [,activity]',然後'Yvar〜datetime'作爲您的公式。 –

+0

用'reconfulate(datetime,activity)'替換'activity〜datetime'。 – lmo

回答

0

我們沒有你正在使用的數據,但我認爲你可以做最簡單的事情是:

pdf("All Actograms.pdf") 
for(i in 3:(length(dat) - 1)) { 

    activity <- colnames(dat)[i]#save the name of the column I 
    colnames(dat)[i] <- "activity" # change the name of column I to activity 
    # Plot the actogram 
    print(actogram(activity~datetime, dat=dat, col="black", main=activity, strip.left.format="%m/%d", doublePlot = TRUE, scale=0.75)) 

    colnames(dat)[i] <- activity # change back the name of the column I to its original name 
} 
dev.off() 

希望它的作品。

+0

謝謝,這是有效的。 – Luciano