簡體   English   中英

僅針對某些變量使用ggplot2創建boxplot循環

[英]Creating a boxplot loop with ggplot2 for only certain variables

我有一個包含99個觀測值的數據集,我需要為其中具有特定字符串的觀測值創建箱形圖。 但是,當我運行此代碼時,我從原始函數而不是循環中獲得了57個完全相同的圖。 我想知道如何防止劇情被覆蓋,但仍然創建全部57條。這是劇情的代碼和圖片。 謝謝!

箱線圖格式

    #starting boxplot function
     myboxplot <- function(mydata=ivf_dataset, myexposure = 
     "ART_CURRENT", myoutcome = "MEG3_DMR_mean")
     {bp <- ggplot(ivf_dataset, aes(ART_CURRENT, MEG3_DMR_mean)) 
     bp <- bp + geom_boxplot(aes(group =ART_CURRENT))
     }

     #pulling out variables needed for plots
     outcomes = names(ivf_dataset)[grep("_DMR_", names(ivf_dataset), 
     ignore.case = T)]

     #creating loop for 57 boxplots
     allplots <- list()
     for (i in seq_along(outcomes))
     {
     allplots[[i]]<- myboxplot (myexposure = "ART_CURRENT", myoutcome = 
     outcomes[i])  
     }
     allplots

我建議閱讀有關標准和非標准評估以及如何與tidyverse一起使用的信息。 這里有一些鏈接

http://adv-r.had.co.nz/Functions.html#function-arguments

http://adv-r.had.co.nz/Computing-on-the-language.html

我也發現這很有用

https://rstudio-pubs-static.s3.amazonaws.com/97970_465837f898094848b293e3988a1328c6.html

另外,您需要提供一個示例,以便可以復制您的問題。 這是我創建的數據。

df <- data.frame(label = rep(c("a","b","c"), 5), 
                x = rnorm(15),
                y = rnorm(15),
                x2 = rnorm(15, 10),
                y2 = rnorm(15, 5))

我將大多數代碼保持不變,只是更改了需要更改的內容。

myboxplot2 <- function(mydata = df, myexposure, myoutcome){
 bp <- ggplot(mydata, aes_(as.name(myexposure), as.name(myoutcome))) +
   geom_boxplot()
 print(bp)
}
myboxplot2(myexposure =  "label", myoutcome =  "y")

由於aes()使用非標准評估,因此您需要使用aes_() 同樣,請閱讀上面的鏈接。

在這里,我得到了所有以x開頭的列。 我假設您的代碼獲取所需的列。

outcomes <- names(df)[grep("^x", names(df), ignore.case = TRUE)]

在這里,我以與您相同的方式進行遍歷。 我只存儲圖對象。

allplots <- list()
for (i in seq_along(outcomes)){
  allplots[[i]]<- myboxplot2(myexposure = "label", myoutcome = outcomes[i])$plot
}
allplots

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM