2013-01-25 32 views
1

在功能語句中,我沒有將lapply,substitute,print,plot和list組合起來。有人可以指導我修改此代碼嗎?我想:lapply,從數據框中指定和繪製多個變量

  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()             
+1

請重複的例子修改。請參見[如何製作一個很好的重現示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – N8TRO

+0

還請描述當您嘗試代碼時會發生什麼以上,以及你期望發生的事情。 –

+0

我可以肯定的發佈一個例子,如果需要的話。該文件實際上只是SQL Server上的一個表,其中包含許多字段,一些數字和一些字符。 – user2009447

回答

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() 
    
+0

我欣賞這個建議。上述代碼塊的結果是包含兩個圖的單個pdf,兩個變量的每一個分別繪製爲y。我想要的是爲每個繪圖生成單獨的pdf,並且每個繪圖將是數據框中的第一個變量與數據框中指定的後續變量之一。因此,第一個pdf ---> brg_field6.pdf,包含字段1與字段6的圖;第二個pdf ---> brg_field8.pdf,包含字段1與字段8等的圖。我希望​​這個過程能夠像應用函數一樣快速運行,無論是使用矢量還是使用dfs。 – user2009447

+0

@ user2009447我更新我的答案... – agstudy

+0

謝謝。結合你的評論,現在在我原來的問題中使用lapply的版本也適用。 – user2009447