Hello fellow R-ers,
I have spent some time on this and it is driving me NUTS! I am sure there is a
solution, so please help.
I am trying to create a function that will plot different lines for subsets of a
dataset. For example, I am trying to look at different drug groups (drug2),
let's say 1,2,3,4, and 5. The data has 2 different rates, college students
and high school students (var names cs and hs). Here is my code:
stuff<-function(druglist, rate, yaxislabel)
{
drugs<-read.csv("drugs.csv", header=T)
druglist.data<-drugs[which(drugs$drug2 %in% druglist),]
par(xpd=NA,oma=c(3,0,3,16),usr=c(1,40,0,0.5))
#print(rate)
plot(druglist.data$counter, druglist.data$rate, type="n",
xlab="Quarter", ylab="yaxislabel", xaxt='n',
yaxt='n', main="", ylim=c(0,.5))
for (i in druglist)
{
line<-druglist.data[which(druglist.data$drug2==i),]
lines(line$counter, line$rate, type='l')
print(line$drug2)
print(line$counter)
print(line$rate)
}
}
stuff(c(1, 2, 3, 4, 5), 'cs')
stuff(c(1, 2, 3, 4, 5), 'hs')
I have played with attach and detach so I don't have to use the $, but that
did not work. I also read several posts suggesting substitute(), but I don't
know where to use it. The code works until the for loop, but at this point the
line$rate outputs as 'NULL'. Please help.
Thanks!
Claire, MS
Statistical Research Specialist
The Denver Health email system has made the following annotations
---------------------------------------------------------------------CONFIDENTIALITY
NOTICE - This e-mail transmission, and any documents, files or previous e-mail
messages attached to it may contain information that is confidential or legally
privileged. If you are not the intended recipient, or a person responsible for
delivering it to the intended recipient, you are hereby notified that you must
not read this transmission and that any disclosure, copying, printing,
distribution or use of any of the information contained in or attached to this
transmission is STRICTLY PROHIBITED. If you have received this transmission in
error, please immediately notify the sender by telephone or return e-mail and
delete the original transmission and its attachments without reading or saving
in any manner. Thank you.
[[alternative HTML version deleted]]
Hi, If you move the read.csv statement outside the function and instead pass the data as an argument, then you can provide a reproducible example using dput(head(drugs, 20)) or a similar fake dataset. It's really hard to debug code without knowing what kind of data it is supposed to act upon. In the meantime, have you tried running the code line by line outside the function to see what happens at each step, including setting the loop variable to 1, 2, 3, etc and seeing what happens? Sarah On Fri, Nov 9, 2012 at 12:38 PM, Le Lait, Marie-Claire <Marie-Claire.LeLait at rmpdc.org> wrote:> Hello fellow R-ers, > I have spent some time on this and it is driving me NUTS! I am sure there is a solution, so please help. > > I am trying to create a function that will plot different lines for subsets of a dataset. For example, I am trying to look at different drug groups (drug2), let's say 1,2,3,4, and 5. The data has 2 different rates, college students and high school students (var names cs and hs). Here is my code: > > stuff<-function(druglist, rate, yaxislabel) > { > drugs<-read.csv("drugs.csv", header=T) > druglist.data<-drugs[which(drugs$drug2 %in% druglist),] > par(xpd=NA,oma=c(3,0,3,16),usr=c(1,40,0,0.5)) > #print(rate) > plot(druglist.data$counter, druglist.data$rate, type="n", xlab="Quarter", ylab="yaxislabel", xaxt='n', yaxt='n', main="", ylim=c(0,.5)) > > for (i in druglist) > { > line<-druglist.data[which(druglist.data$drug2==i),] > lines(line$counter, line$rate, type='l') > print(line$drug2) > print(line$counter) > print(line$rate) > } > } > > stuff(c(1, 2, 3, 4, 5), 'cs') > stuff(c(1, 2, 3, 4, 5), 'hs') > > > I have played with attach and detach so I don't have to use the $, but that did not work. I also read several posts suggesting substitute(), but I don't know where to use it. The code works until the for loop, but at this point the line$rate outputs as 'NULL'. Please help. > > Thanks! > > Claire, MS > Statistical Research Specialist >-- Sarah Goslee http://www.functionaldiversity.org