[英]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.