如何在循环中给出公式值

时间:2017-08-01 22:34:23

标签: r loops dataframe formula

我有一个程序,应该在给定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函数时,我得到错误&#34;二元运算符的非数字参数。&#34;问题是公式&#34;活动〜日期时间,&#34;因为datetime是一个列名,活动也应该是。如果我从循环中尝试它,使用活动列的名称而不是包含名称的变量,它可以正常工作。经过调试,我发现actogram函数正在接收字符串&#34; activity,&#34;而不是变量活动。我不太了解公式,但我想知道是否有任何方法可以完成我想要做的事情,这是循环通过许多列,在&#34之前更改列;〜&#34;每次我调用actogram功能。我是R的新手。

谢谢!

1 个答案:

答案 0 :(得分: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()

希望它有效。