2014-12-01 3 views
0

Я хотел бы получить как можно больше графиков в качестве факторов/значений в переменной.Применить функцию ко всем возможным значениям переменной

Например, я хотел бы построить следующие переменные (v1, v2, v3, v4, v5, v6, v7, v8), которые я определил как шкалу для всех возможных значений в стране переменных. Поэтому я получаю в этом случае три разных сюжета.

Я знаю, как построить его отдельно, например, в этом случае я бы использовал следующий:

basicgraph(Data[country==1, scale1]) 
basicgraph(Data[country==2, scale1]) 
basicgraph(Data[country==3, scale1]) 

Я хотел бы свою функцию, чтобы построить так много графиков как факторы/значения (без указания номера факторов/значений). Я попробовал «применить», но я не могу заставить его работать, поэтому любой ключ может быть полезен для меня.

У меня есть набор данных, который выглядит как:

v1 v2 v3 v4 v5 v6 v7 v8 country 
1 NA NA NA NA NA NA NA NA 1 
2 5 5 5 5 5 4 5 5 2 
3 4 5 3 5 4 5 5 5 3 
4 5 5 5 4 2 4 4 5 1 
5 4 3 5 4 4 5 4 5 2 
6 5 5 5 2 3 4 3 5 3 
7 NA NA NA NA NA NA NA NA 1 
8 3 5 5 5 4 5 4 4 2 
9 4 5 5 4 5 5 4 5 3 
10 2 4 4 5 4 5 4 5 1 
11 4 5 5 3 4 4 4 5 2 
12 4 5 4 4 5 4 4 5 3 
13 5 5 4 3 3 5 5 5 1 
14 3 5 1 2 3 1 4 5 2 

Ihave определил масштаб как:

scale1 <- names(Data) %in% c("v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8") 

Я определил функцию Заговор:

basicgraph<-function(df, title, lab) 

{ 

    for(i in 1:length(df)) 
    { 
    y <- melt(df) 
    z <- with(y, as.data.frame(table(variable, value, exclude = NULL))) 
    z <- z[!is.na(z$variable), ] 
    z$scale <- z$variable 
    levelss<-levels(z$variable) 

    } 

theme_nogrid <- function (base_size = 12, base_family = "") 
     { 
     theme_bw(base_size = base_size, base_family = base_family) %+replace% 
     theme(panel.grid = element_blank()) + 
     theme(axis.text.x =element_text(size = base_size * 0.8 , lineheight = 0.9, 
             vjust = 0.5, hjust=1, angle=90)) 
     } 

plot1<-function(z) { 
    ggplot(data = z, aes(x = variable, y = value, size = Freq))+ 
    geom_point(aes(size = Freq, stat = "identity", position = "identity"), shape = 20, color="black", alpha=0.6) + 
    scale_size_continuous(range = c(3,15)) + 
    scale_x_discrete(breaks=levelss,labels=lab)+ 
    xlab("")+ #Afegir/canviar títol eix x 
    ylab("Response")+ #Afegir/canviar títol eix y 
    ggtitle(title)+ #Títol a dalt 
    theme_nogrid() 
} 

} 
+0

Вы заметили, что здесь есть ошибка: 'scale1 <- names (Data)% in% c (" v1, "v2", "v3", "v4", "v5", "v6", " v7 "," v8 ")'? v1 не заключен. – Nikos

+0

Я не заметил, теперь редактируется, спасибо. –

ответ

0

Это довольно запутанный вопрос и пример. I думаю вы хотите произвести другой график для каждого значения country? В этом случае я хотел бы предложить что-то вроде этого:

library(reshape2) 
Data_m <- melt(Data, id.vars="country") # melt the data into 'long' format 

f <- function(d) { # function that produces a graph and waits 
    print(qplot(variable, value, data=d) + ggtitle(unique(d$country))) 
    readline() 
} 

library(plyr) 
d_ply(Data_m, .(country), f) # produces three separate graphs 

d_ply вызов расщепляется Data_m на три части и неоднократно называет f на каждом, производя график этого подмножества данных, ничего не зная о существе данных рентгенографический.

+0

Я пробовал ваш пример, и я получаю только 1 график .. Я не знаю, делать это неправильно или просто не работает. –

+0

Он работает, единственное, что он предполагает, это то, что 'Data' является вашим фреймом данных выше, и загружается ggplot2. Вы понимаете, что вам нужно нажать RETURN после каждого сюжет для просмотра следующего? ... Я немного изменил код, чтобы отобразить номер 'country' над каждым сюжетом. HTH. –

+0

После попытки, я заставил его работать, когда это случилось, я принял ваш ответ :) –