2013-07-01 5 views
4

유전 협회 연구의 유형에 대한 예상 전력을 계산하는 Shiny 앱이 있습니다. ui.R은 매우 간단하며 server.R에는 데이터 프레임을 제공하는 함수가 있습니다 (일부 매개 변수가 있기 때문에 reactive으로이 함수를 사용할 수 없다고 생각합니다).shinyServer에서 ggplot 피드로 함수를 사용하여 데이터 만들기

요점과의 링크는 here입니다. 이 앱은 제대로 추정치를 계산

library(shiny) 
shiny:: runGist('5895082') 

,하지만 나는 그것을 관한 두 가지 질문이 있습니다 : 그것을 실행하려면

  • 하기는 output$powTable 실제로 범위 내에 포함 된 모든 값을 나타내는 것이 가능하다, 처음에는 sliderInput(n.cases)?에 있습니다. 범위의 두 극단적 인 값을 나타내는 것만 같습니다 ... 내가 뭘 잘못하고있는 걸까요?

    Error: Reading objects from shinyoutput object not allowed.

가 어떻게이 ggplot을 공급하는 기능 f()에서 데이터 (? 반응성)을 전달할 수 있습니다

  • 응용 프로그램을 실행하는 오류가있다? 많은 시행 착오 끝에 나는 매우 잃어버린다. 내 코드의 오류는 어디에 있습니까? 많은 thaks 사전에!

    함수의 원래 코드가 잘 작동 : (EDITED) 모든

    f <- function(ncases, p0, OR.cas.ctrl, Nh, sig.level) { 
    num.cases <- ncases 
    p0 <- p0 
    Nh <- Nh 
    OR.cas.ctrl <- OR.cas.ctrl 
    sig.level <- sig.level 
    # Parameters related to sig.level, from [Table 2] of Samuels et al. 
    # For 90% power and alpha = .05, Nscaled = 8.5 
        if (sig.level == 0.05){ 
    A <- -28 # Parameter A for alpha=.05 
    x0 <- 2.6 # Parameter x0 for alpha=.05 
    d <- 2.4 # Parameter d for alpha=.05 
        } 
        if (sig.level == 0.01){ 
    A <- -13 # Parameter A for alpha=.01 
    x0 <- 5 # Parameter x0 for alpha=.01 
    d <- 2.5 # Parameter d for alpha=.01 
        } 
        if (sig.level == 0.001){ 
    A <- -7 # Parameter A for alpha=.001 
    x0 <- 7.4 # Parameter x0 for alpha=.001 
    d <- 2.8 # Parameter d for alpha=.001 
        } 
        out.pow <- NULL # initialize vector 
    for(ncases in ncases){ 
        OR.ctrl.cas <- 1/OR.cas.ctrl # 1. CALCULATE P1 FROM A PREDEFINED P0, AND A DESIRED OR 
        OR <- OR.ctrl.cas 
        bracket.pw <- p0/(OR - OR*p0) # obtained after isolating p1 in OR equation [3]. 
        p1 <- bracket.pw/(1 + bracket.pw) 
        Nh037 <- Nh^0.37 # 2. CALCULATE NSCALED 
        num.n <- num.cases*((p1-p0)^2) 
        den.n <- (p1*(1-p1) + p0*(1-p0))*Nh037 
        Nscaled <- num.n/den.n 
        num.power <- A - 100 # 3. CALCULATE POWER 
        den.power <- 1 + exp((Nscaled - x0)/d) 
        power <- 100 + (num.power/den.power) # The power I have to detect a given OR with my  data, at a given alpha 
        } 
    OR <- OR.cas.ctrl 
    out.pow <- data.frame(num.cases, Nh, Nscaled, p0, OR, sig.level, power) 
    out.pow 
    } 
    
    mydata <- f(ncases=seq(50,1000, by=50), 0.4, 2.25, 11, 0.05) 
    mydata 
    
    library(ggplot2) 
    print(ggplot(data = mydata, aes(num.cases, power)) + 
    theme_bw() + 
    theme(text=element_text(family="Helvetica", size=12)) + 
    labs(title = "Ad-hoc power for haplogroup") + 
        scale_color_brewer(palette = "Dark2", guide = guide_legend(reverse=TRUE)) + 
    xlab("number of cases/controls") + 
    ylab("power") + 
    scale_x_log10() + 
    geom_line(alpha=0.8, size=0.2) + 
    geom_point(aes(shape = factor(OR)), colour="black")) 
    
  • 답변

    4

    먼저라는 이름의 n.cases 가지고 일관성 나는 생각한다. 경우에 따라 n.cases이고 다른 경우는 ncases입니다. 그게 실수 야?

    어쨌든 output$mydata()이 잘못되었습니다. 출력이 아닙니다. 그냥해야한다 : 다음

    mydata <- reactive(f(input$n.cases, 
        input$p0, 
        input$OR.cas.ctrl, 
        input$Nh, 
        input$sig.level)) 
    

    그리고 output$powHap()에서 그것을 실행할 때 그것이 있어야 :

    data = mydata() 
    

    보다는 :

    output$powHap <- renderPlot(
    { 
        print(ggplot(data = mydata(), aes(ncases, power)) + 
        theme_bw() + 
        theme(text=element_text(family="Helvetica", size=12)) + 
        labs(title = "Ad-hoc power for haplogroup") + 
        scale_color_brewer(palette = "Dark2", guide = guide_legend(reverse=TRUE)) + 
        xlab("number of cases/controls") + 
        ylab("power") + 
        scale_x_log10() + 
        geom_line(alpha=0.8, size=0.2) + 
        geom_point(aes(shape = factor(OR)), colour="black")) 
    }) 
    

    중요한 부분은 당신이 할 필요가있다

    data = output$mydata 
    

    output$mydata은 (리 액티브) 기능이기 때문에.


    나는 the documentation on how reactives work을 읽을 것을 제안합니다. 나중에 모든 것이 더 의미가 있어야합니다. 그런데 아주 재현 할 수있는 예제는 +1. 이것이 모든 질문을 게시하는 방법입니다.

    +0

    감사합니다. 그것은 잘 작동합니다. 나는 R이 아닌 배경을 프로그래밍하지 않고 ** Shiny **로 시작했을 때 나는 모두 엉망이되었다. 또한 * f() * 함수의 불일치를 검토 할 것입니다. – Mareviv

    +0

    다시 한번 감사드립니다! 이 문제가 해결 된 후에이 튜토리얼을 새로 읽으면 나에게 더 명확해질 것이다. – Mareviv

    +0

    방금 ​​f() 함수에서 num.cases에 대한 n.cases를 변경하여 내 게시물을 편집했습니다. – Mareviv