1

我在函数语句中结合 lapply、substitute、print、plot 和 list 没有任何成功。有人可以指导我修改此代码的方法吗?我想:

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

这些字段是数字的。谢谢。

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()                                                 
4

1 回答 1

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()
    
于 2013-01-25T02:00:54.120 回答