2016-09-07 2 views
0

я создал фрейм данных с двумя факторами, х-переменными, и у-переменные:Использования lapply сделать сюжет с факторами из списка данных фреймов

set.seed(1) 
abc.df <- data.frame(col1 = rep(c("a", "b", "c"), 1000), col2 = rep(1:4, 750), 
         col3 = rnorm(3000), col4 = rnorm(3000, 2)) 
names(abc.df) <- c("factor1", "factor2", "q", "value") 
abc.df$factor1 <- as.factor(abc.df$factor1) 
abc.df$factor2 <- as.factor(abc.df$factor2) 
abc_list <- split(abc.df, abc.df$factor1) 

Я хочу, чтобы создать три участки для каждой буквы (а, Ь, с) с факторами, числа отличающихся по цвету, но он генерируется сообщение об ошибке:

par(mfrow = c(1, 3)) 
lapply(abc_list, function(x) {plot(abc_list[[x]]$q, abc_list[[x]]$value, 
            col = factor2)}) 
Error in abc_list[[x]] : invalid subscript type 'list' 

Как я могу сделать ряд участков с правом синтаксиса?

ответ

3

При использовании lapply перебрать список, передаваемый аргумент функции является элементом списка не показатель, так что вы не можете использовать abc_list[[x]] подмножеству вместо этого, просто использовать x, поэтому для Вашего случая:

par(mfrow = c(1, 3)) 
lapply(abc_list, function(x) {plot(x$q, x$value, col = x$factor2)}) 

enter image description here

Существует еще один удобный способ получить такой сюжет, используя ggplot2 пакет с facet_grid, где вам не нужно разделить исходный кадр данных в списки, но указать factor1 в качестве переменной макет вашего участков:

library(ggplot2) 
ggplot(abc.df, aes(x = q, y = value, col = factor2)) + geom_point() + facet_grid(.~factor1) 

enter image description here

+0

Спасибо за ответ. Теперь я пытаюсь понять, как получить заголовок каждого графика в базе и линии регрессии для каждого числового фактора. И да, я мог бы сделать это с ggplot2, но мне сказали сделать это в базовой графике. – JDS

Смежные вопросы