2017-08-01 47 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