2016-09-28 43 views
0

我需要繪製約50幅這些圖表,我只需要更改x,y和數據。有沒有辦法縮短這個看起來不那麼雜亂?無需下載任何外部庫。如何循環或縮短R中的腳本

RatingsA,RatingsB和Looks是具有大約100k個值的向量,例如, ( 「空」,439 ...等)

#Plotting graphs based based on Looks Vs Ratings 
png('1.png') 
par(mfrow=c(4,2)) 
plot(RatingA ~ Age, main="Looks Vs RatingA at List1", xlab="Looks",  ylab="RatingA", xlim=c(20,80), data=List1) 
plot(RatingA ~ Age, main="Looks Vs RatingA at List2", xlab="Looks", ylab="RatingA", xlim=c(20,80), data=List2) 
plot(RatingA ~ Age, main="Looks Vs RatingA at List3", xlab="Looks", ylab="RatingA", xlim=c(20,80), data=List3) 
plot(RatingA ~ Age, main="Looks Vs RatingA at List4", xlab="Looks", ylab="RatingA", xlim=c(20,80), data=List4) 
plot(RatingA ~ Age, main="Looks Vs RatingA total", xlab="Looks", ylab="RatingA", xlim=c(20,80), data=mainlist) 
dev.off() 

png('2.png') 
par(mfrow=c(4,2)) 
plot(RatingB ~ Looks, main="Looks Vs RatingB at EVR1", xlab="Looks", ylab="RatingB", xlim=c(20,80), data=List1) 
plot(RatingB ~ Looks, main="Looks Vs RatingB at EVR2", xlab="Looks", ylab="RatingB", xlim=c(20,80), data=List2) 
plot(RatingB ~ Looks, main="Looks Vs RatingB at EVR3", xlab="Looks", ylab="RatingB", xlim=c(20,80), data=List3) 
plot(RatingB ~ Looks, main="Looks Vs RatingB at EVR4", xlab="Looks", ylab="RatingB", xlim=c(20,80), data=List4) 
plot(RatingB ~ Looks, main="Looks Vs RatingB total", xlab="Looks", ylab="RatingB", xlim=c(20,80), data=mainlist) 
dev.off() 
+0

請考慮下面的代碼片段。 (for C(「A」,「B」))print(paste0(「Var」,i))' – shayaa

回答

1

把它們放入一個功能。參數是您想要更改的變量,例如x,y,data

plot_graph <- function(x, y, data) 
{ 
     your code here, you need to change the original code a little bit, 
    by putting x, y, data instead of specific values. 
} 

每當你想圖的曲線圖,只需調用函數:

plot_graph(x_value, y_value, your_data) 

現在,它更清晰。

然後,您可以使用for循環,或apply功能(或某些還挺功能可以地圖,我的意思是可以分割數據成多部分,則函數適用於每個部分。)

for循環示例:

#vector x_vector store 50 values for x 
x_vector = c(x1_value, x2_value, ,x50_value) 

#do the same with y_vector, data 
y_vector = c(y1_value, y2_value, ,y50_value) 
data= c(data1, data2, ,data50) 

#plot 50 graghs 
for (i in 1:50) 
    plot_graph(x_vector[i], y_vector[i], data[i]) 

您還可以使用apply函數(函數式編程)。它比循環更好,但更復雜一點。

+1

這會更好地放置在評論部分 – shayaa

+0

@abhiieor:是的,使用它與apply函數,或者只是一個for循環。 – Catbuilts

+0

隨着你提到把你的代碼放在這裏的那一點,你能不能詳細說明一下,因爲那是我現在正在混淆的東西。其餘的作品:D。 – OwnThisField

0

在函數中概括繪圖代碼。我認爲你的問題存在一個錯字,第一組情節的標題應該可能是「年齡vs評分A」。如果你真的想用數字來標題,可以在函數中添加另一個參數,並在png中使用它。作爲第三個參數稍後將它作爲map加入。

func_plot = function(x, y) { 
    png(paste0(x, ".png")) 
    par(mfrow=c(4,2)) 
    f = as.formula(y~x) 
    plot(f, main=paste0(x, " Vs ", y, " at EVR1"), xlab=x, ylab=y, xlim=c(20,80), data=List1) 
    plot(f, main=paste0(x, " Vs ", y, " at EVR2"), xlab=x, ylab=y, xlim=c(20,80), data=List2) 
    plot(f, main=paste0(x, " Vs ", y, " at EVR3"), xlab=x, ylab=y, xlim=c(20,80), data=List3) 
    plot(f, main=paste0(x, " Vs ", y, " at EVR4"), xlab=x, ylab=y, xlim=c(20,80), data=List4) 
    plot(f, main=paste0(x, " Vs ", y, " Total"), xlab=x, ylab=y, xlim=c(20,80), data=mainlist) 
    dev.off() 
} 

運行函數爲您的要迭代的事物列表。

Map(func_plot, c("RatingA", "RatingB", etc), c("Age", "Looks", etc)) 
+0

是的,的確我有一個錯字非常感謝你:)。 – OwnThisField

+0

不知道這裏有什麼錯,但它沒有給我正確的圖。而不是一個完整的NA's – OwnThisField

+0

'充滿NA'的圖表是什麼意思? – Vlo