Я пытаюсь сделать один график для каждого столбца фрейма данных. В заголовке сюжета я хотел бы вставить название столбца. Но мне непонятно, как циклически перебирать имена столбцов.

`
snp1 <- runif(10,0,1)
snp2 <- runif(10,0,1)
snp3 <- runif(10,0,1)
snp4 <- runif(10,0,1)
pops <- paste('pop',1:10,sep='')
freq<- data.frame(snp1, snp2, snp3, snp4)
rownames(freq) <- pops
`

`freq
           snp1       snp2      snp3      snp4
pop1  0.4174916 0.16731405 0.3128548 0.8911312
pop2  0.6965112 0.38021753 0.9039974 0.7716086
pop3  0.6993367 0.35984906 0.5455272 0.4824148
pop4  0.5274188 0.23394308 0.8256183 0.5394379
pop5  0.1561838 0.57830706 0.3515259 0.9654348
pop6  0.1712315 0.05702597 0.2600516 0.7401471
pop7  0.6950924 0.15866269 0.1411592 0.3601718
pop8  0.1360697 0.96311812 0.3862654 0.5717191
pop9  0.4941322 0.63638984 0.3307210 0.5176871
pop10 0.1986985 0.63893809 0.9380498 0.2106029
`

`
library(ggplot2)
pdf('snp_plots.pdf')
apply(freq, 2, function(x) qplot(1:10, x, ylim=c(0,1), main=colnames(freq)))
dev.off()
`
r
0
cryptic0 25 Дек 2017 в 18:29

1 ответ

Лучший ответ

Вы можете использовать map2 из purrr вместо apply.

library(purrr)
library(ggplot2)
map2(.x = freq, .y = names(freq), ~qplot(1:10, .x, ylim = c(0, 1), main = .y))

ИЗМЕНИТЬ

Вместо этого мы можем использовать purrr::imap, что является сокращением для map2(x, names(x), ...)

imap(.x = freq, ~qplot(1:10, .x, ylim = c(0, 1), main = .y))
1
markus 27 Янв 2018 в 12:10