lapply,指定和绘制数据框中的多个变量

时间:2013-01-25 01:30:49

标签: r list dataframe lapply substitution

我在功能声明中没有成功地将lapply,substitute,print,plot和list结合起来。有人可以指导我修改这段代码吗?我想:

  1. 自动绘制数据框中的一些但不是所有字段与df
  2. 中的第一个字段
  3. 指定要绘制的字段
  4. 将结果写入文件
  5. 字段是数字。感谢。

    brg<-as.data.frame(sqlFetch(channel,"Bearing"))               
    is.data.frame(brg)                                            
    
    varlist<-names(brg)[c(6,8,10,12)]                             
    varlist                                                       
    pdf(file="brg%d.pdf")                                         
    figures<-lapply(varlist,function(x) {                         
    print(plot(substitute(brg[c(1,i)], (list(i = as.name(x))))))
    })  
    

    更新:感谢您的评论。以下是此代码的两个工作版本,其中包含轴标签(df从SQL Server读取,如下所示):

         #vers. 1
         brg<-as.data.frame(sqlFetch(channel,"Bearing"))
         is.data.frame(brg)
         dim(brg)
         head(brg)
         names(brg)<-tolower(names(brg))
         names(brg)
         varlist<-names(brg)[c(6,8,10,12)]
         varlist
         pdf(file="brgd.pdf")
         for (x in varlist) plot(brg[,1],brg[,x], xlab=names(brg[1]),ylab=as.name             (x))           
         dev.off()
    
         #vers. 2
         brg<-as.data.frame(sqlFetch(channel,"Bearing"))
         is.data.frame(brg) 
         dim(brg)
         head(brg)
         names(brg)<-tolower(names(brg))
         names(brg)
         varlist<-names(brg)[c(6,8,10,12)]
         varlist
         pdf(file="brg1.pdf")
         figures<-lapply(varlist,function(x) {
    
         (plot(brg[,1],brg[,x], ylab=as.name(x)))
         })
         dev.off()                                                 
    

1 个答案:

答案 0 :(得分:1)

目前还不清楚你想做什么,但我仍然对你的代码有一些评论。我想你在这里尝试复杂化一个简单的任务,绘制一些变量并将图表保存在文件中。

  1. 无需使用substitute(它会给出符号),您可以使用列名称对data.frame进行子集化。
  2. 此处无需使用lapply,因为您不保存结果,只是想重复绘图。
  3. 为什么在文件名中使用%。
  4. 您必须在绘图解锁后关闭设备。

    brg<- data.frame(a=rnorm(10),b= rnorm(10),   ## a reproducible data frame
                     c=rnorm(10))
    varlist<-names(brg)[c(1,2)] 
    pdf(file="brgd.pdf")                                                   
    for (x in varlist)   plot(brg[,1],brg[x])           ## the substitue would give brg[c(1,a)] !!
    dev.off()