2017-12-28 33 views
0

평균, 2 sd 오류 막대, 1.5 IQR 오류 막대, 3e 25e, 50e, 75e 및 97e 센티미터를 포함하는 광선을 계산하는 새로운 기하 구조를 작성했습니다. 바이올린 기초 관찰.합계 목록에 기반한 복합 기하학에서 aes 사용시 문제

# domestic functions 
    #~~~~~~~~~~~~~~~~~~~ 
    IQR.interval.min <- function(vector) 
    { 
    quantile(vector, 0.25) - 1.5 * IQR(vector) ; 
    } ; 

    IQR.interval.max <- function(vector) 
    { 
    quantile(vector, 0.75) + 1.5 * IQR(vector) ; 
    } ; 

    SD.interval.min <- function(vector) 
    { 
    mean(vector) - 2 * sd(vector) ; 
    } ; 

    SD.interval.max <- function(vector) 
    { 
    mean(vector) + 2 * sd(vector) ; 
    } ; 
# My geom 
geom_ray <- function(... , 


        violin.param = list(draw_quantiles = c(0.03, 0.25, 0.5, 0.75, 0.97), 
              scale = "count"), 
         point.param = list(), 
         IQR.param = list(colour = "black", width = 0.2), 
         mean.param = list(shape = 18, size = 4, colour = "darkgrey", 
             position = position_nudge(x = 0.12)), 
         SD.param = list(colour = "darkgrey", width = 0.2, 
             position = position_nudge(x = 0.12)) 
        ) 
{ 
    # graph 
    #~~~~~~ 
    # Parameters 
    param <- list(...) ; 

    violin.param <- modifyList(param, violin.param) ; 

    point.param <- modifyList(param, point.param) ; 

    IQR.param <- modifyList(param, IQR.param) ; 

    mean.param <- modifyList(param, mean.param) ; 

    SD.param <- modifyList(param, SD.param) ; 

    # Stats 
    violin.gg <- do.call("stat_ydensity", 
         modifyList(list(geom = GeomViolin, 
              position = "dodge"), 
            violin.param)) ; 
    point.gg <- do.call("stat_identity", 
         modifyList(list(geom = GeomPoint, 
             position = "identity"), 
            point.param)) ; 

    IQR.gg <- do.call("stat_summary", 
         modifyList(list(fun.ymin = "IQR.interval.min", 
             fun.ymax = "IQR.interval.max", 
             geom = GeomErrorbar, 
             position = "identity"), 
            IQR.param)) ; 

    mean.gg <- do.call("stat_summary", 
        modifyList(list(fun.y = "mean", 
             geom = GeomPoint), 
           mean.param)) ; 

    SD.gg <- do.call("stat_summary", 
        modifyList(list(fun.ymin = "SD.interval.min", 
             fun.ymax = "SD.interval.max", 
             geom = GeomErrorbar), 
           SD.param)) ; 

    # Output 
    #~~~~~~~ 
    return(list(violin.gg, 
       point.gg, 
       IQR.gg, 
       mean.gg, 
       SD.gg 
       ) 
     ) 
} ; 

기포 외부에서 에이스를 사용하면 잘 돌아갑니다.

df1 %>% 
    ggplot(.) + 
    geom_ray(aes(x = factor1, y = vector1)) 
# Return: 
Erreur : stat_ydensity requires the following missing aesthetics: x, y 

누군가가 나를 제발 해결하는 데 도움이 수 없습니다 : 나는 기하 구조 내부에 AES를 사용하는 경우

# i.e. 
vector1 <- rnorm(200, 10, 20) ; 
factor1 <- factor(sample(c("homme", "femme"), 200, TRUE, c(0.4,0.6))) ; 
data.frame(factor1 = factor1, vector1 = vector1) -> 
    df1 

require(dplyr) ; require(ggplot2) ; 

df1 %>% 
    ggplot(.) + 
    aes(x = factor1, y = vector1) + 
    geom_ray() 

Raychart

그러나, 그것은 실행되지 않는 이유는 무엇입니까? ...은 당신의 매핑 객체를 가지고 있지만 인수 이름이없는 단지 개체입니다, 당신의 실패 예에서

:

감사

답변

0

문제는 modifyList의 사용이다.

test <- list(aes(x, y)) 

modifyList이 이름 목록을 일치하도록 설계되었습니다 ... 같은 익명의 목록과 같다. 그것은 이름없이 무엇을 던졌습니다 : (. test에서 매핑이 사라졌다합니다)

test2 <- list(a = 1) 
modifyList(test2, test) 
$a 
[1] 1 

는`

이은을 사용하는 경우 중 하나가 당신의 인수 이름을 붙여야을 의미합니다 함수 :

ggplot(df1) + 
    geom_ray(mapping = aes(x = factor1, y = vector1)) 

또는 함수 cal에 중요한 인수 이름을 추가하십시오. 대신

...를 사용하는 난 (당신은 공백에까지 완화 할 수 있습니다, 그리고 라인의 끝에 ;을 사용할 필요가 없습니다.)

+0

감사합니다. 내 초기 문제를 해결하기 위해 = argumen = NULL 및 data = NULL을 추가하십시오. ts. –

0

을 내 기하 구조를 작성, 나는 우연히 한 에이스와 enivronment와 새로운 문제.

내부 함수가 고려되지 않는 둘) 고려 geom_text에서 인수 AES (라벨 = ifelse (is.outlier.all (데이터 $ Y) rownames (데이터) ","AES 아니다.

는 그것이 reported issue 그러나되게 수정 (geom_ (환경 = 환경(), ...) 또는 전자 < 생성 - new.env을()). 당신의 도움에 대한 내 코드 작동하지 않습니다

geom_mantaray <- function(mapping = NULL, 
          data = NULL, 
          inherit.aes = TRUE, 
          outlier = TRUE, 
          ..., 
          violin.param = list(draw_quantiles = c(0.03, 0.25, 0.5, 0.75, 0.97), 
               scale = "count"), 
          point.param = list(), 
          IQR.param = list(colour = "black", width = 0.2), 
          mean.param = list(shape = 18, size = 4, colour = "darkgrey", 
              position = position_nudge(x = 0.12)), 
          SD1.param = list(colour = "darkgrey", width = 0.1, 
              position = position_nudge(x = 0.12)), 
          SD2.param = list(colour = "darkgrey", width = 0.1, 
              position = position_nudge(x = 0.12)), 
          SD3.param = list(colour = "darkgrey", width = 0.1, 
              position = position_nudge(x = 0.12)), 
          text.param = list(size = 3, 
               position = position_nudge(x = -0.06)) 
) 
{ 
    # Internal functions 
    #~~~~~~~~~~~~~~~~~~~ 
    IQR.interval.min <- function(vector) 
    { 
    quantile(vector, 0.25) - 1.5 * IQR(vector) ; 
    } ; 

    IQR.interval.max <- function(vector) 
    { 
    quantile(vector, 0.75) + 1.5 * IQR(vector) ; 
    } ; 

    SD1.interval.min <- function(vector) 
    { 
    mean(vector) - 1 * sd(vector) ; 
    } ; 

    SD1.interval.max <- function(vector) 
    { 
    mean(vector) + 1 * sd(vector) ; 
    } ; 


    SD2.interval.min <- function(vector) 
    { 
    mean(vector) - 2 * sd(vector) ; 
    } ; 

    SD2.interval.max <- function(vector) 
    { 
    mean(vector) + 2 * sd(vector) ; 
    } ; 


    SD3.interval.min <- function(vector) 
    { 
    mean(vector) - 3 * sd(vector) ; 
    } ; 

    SD3.interval.max <- function(vector) 
    { 
    mean(vector) + 3 * sd(vector) ; 
    } ; 

    is.outlier.all <- function(vector) 
    { 
    # SD outiliers 
    (vector - mean(vector))/sd(vector) -> 
     Z.score ; 

    abs(Z.score) > 3 * sd(vector) -> 
     is.outlierSD.log ; 

    # MAD outiliers 
    (vector - median(vector))/mad(vector) -> 
     Z.scoreMAD ; 

    abs(Z.scoreMAD) > 3 * mad(vector) -> 
     is.outlierMAD.log ; 

    # Tukey's fence outliers 
    quantile(vector, probs = c(0.25, 0.75)) -> quartile.num ; 

    IQR(vector) -> iqr.num ; 

    vector < (quartile.num[1] - (1.5 * iqr.num)) | 
     vector > (quartile.num[2] + (1.5 * iqr.num)) -> 
     is.outlierIQR.log ; 

    # y values 
    is.outlierIQR.log | is.outlierSD.log | is.outlierMAD.log -> is.outlier.log ; 

    return(is.outlier.log) ; 
    } 

    e <- new.env() 
    # graph 
    #~~~~~~ 
    # Parameters 
    param <- list(data = data, 
       mapping = mapping, 
       inherit.aes = inherit.aes, 
       environment = e, 
       ...) ; 

    violin.param <- modifyList(param, violin.param) ; 

    point.param <- modifyList(param, point.param) ; 

    IQR.param <- modifyList(param, IQR.param) ; 

    mean.param <- modifyList(param, mean.param) ; 

    SD1.param <- modifyList(param, SD1.param) ; 

    SD2.param <- modifyList(param, SD2.param) ; 

    SD3.param <- modifyList(param, SD3.param) ; 

    text.param <- modifyList(param, text.param) ; 

    # Stats 
    violin.gg <- do.call("stat_ydensity", 
         modifyList(list(geom = GeomViolin, 
              position = "dodge"), 
            violin.param)) ; 
    point.gg <- do.call("stat_identity", 
         modifyList(list(geom = GeomPoint, 
             position = "identity"), 
            point.param)) ; 

    IQR.gg <- do.call("stat_summary", 
         modifyList(list(fun.ymin = "IQR.interval.min", 
             fun.ymax = "IQR.interval.max", 
             geom = GeomErrorbar, 
             position = "identity"), 
            IQR.param)) ; 

    mean.gg <- do.call("stat_summary", 
         modifyList(list(fun.y = "mean", 
             geom = GeomPoint), 
            mean.param)) ; 

    SD1.gg <- do.call("stat_summary", 
         modifyList(list(fun.ymin = "SD1.interval.min", 
             fun.ymax = "SD1.interval.max", 
             geom = GeomErrorbar), 
            SD2.param)) ; 

    SD2.gg <- do.call("stat_summary", 
         modifyList(list(fun.ymin = "SD2.interval.min", 
             fun.ymax = "SD2.interval.max", 
             geom = GeomErrorbar), 
            SD2.param)) ; 

    SD3.gg <- do.call("stat_summary", 
         modifyList(list(fun.ymin = "SD3.interval.min", 
             fun.ymax = "SD3.interval.max", 
             geom = GeomErrorbar), 
            SD3.param)) ; 

    text.gg <- do.call("stat_identity", 
         modifyList(list( aes(label = ifelse(is.outlier.all(data$y), rownames(data), "")), 
             geom = GeomText), 
            text.param)) ; 

    list(violin.gg, 
     point.gg, 
     IQR.gg, 
     mean.gg, 
     SD1.gg, 
     SD2.gg, 
     SD3.gg) -> 
    output.gg ; 

    if (outlier) 
    { 
    modifyList(output.gg, list(text.gg)) -> 
     output.gg ; 
    } 


    # Output 
    #~~~~~~~ 
    return(output.gg) ; 
} ; 

감사

.