[英]Passing column names into graph function in ggplot2
我有一個大型數據集,其中包含多個因變量,但只有兩個自變量(我將一遍又一遍地使用它來對許多因變量進行排序)。 對每個因變量進行兩次測量,一次在治療前,一次在治療后。 我想編寫一個函數,使我能夠為這些多個因變量中的每一個獲取圖形,該函數的參數作為我希望繪制的任何因變量的兩個列名。
我生成了一個玩具數據集來說明我的問題。 “ t1DV1”和“ t1DV2”是因變量1的治療前和治療后分數。“ t1DV2”和“ t2DV2”是因變量2的治療前和治療后分數。“組”是自變量。
group <- factor(rep(c("A", "B"), 10))
t1DV1 <- runif(20, min = 0, max = 10)
t2DV1 <- runif(20, min = 0, max = 10)
t1DV2 <- runif(20, min = 0, max = 10)
t2DV2 <- runif(20, min = 0, max = 10)
df <- data.frame(group, t1DV1, t2DV1, t1DV2, t2DV2)
df
我嘗試編寫以下功能
DVGraph <- function (DV1, DV2) {
require(tidyr)
dfLong <- gather(df, prePost, Score, DV1:DV1)
require(ggplot2)
barGraph <- ggplot(dfLong, aes(group, Score, fill = prePost)) +
geom_bar(stat = "identity", position = "dodge", size = 0.5) +
scale_fill_manual(values = c("#999999", "#666666")) +
xlab("") +
ylab("Scores") +
theme_bw()
return(barGraph)
}
然后嘗試使用第一個重復測量變量來調用它(我本可以同樣使用第二個變量,即t1DV2和t2DV2)
DVGraph(t1DV1, t2DV1)
但是我得到一個錯誤。
我嘗試像這樣使用倒逗號
DVGraph("t1DV1", "t2DV1")
但是我又遇到了另一個錯誤。
有人知道我該怎么做嗎?
將您的gather
調用更改為以下內容:
dfLong <- gather(df, prePost, Score, DV1, DV2)
然后,當您調用函數時,請使用列號而不是列名:
DVGraph(2, 3)
另外,您也可以替換gather()
與melt()
從reshape2
與substitute()
為了能夠調用函數與不帶引號的變量:
DVGraph <- function (DV1, DV2) {
require(tidyr)
require(reshape2)
dfLong <- melt(df,measure.vars = c(substitute(DV1),substitute(DV2)),
var="prePost",value.name ="Score")
require(ggplot2)
barGraph <- ggplot(dfLong, aes(group, Score, fill = prePost)) +
geom_bar(stat = "identity", position = "dodge", size = 0.5) +
scale_fill_manual(values = c("#999999", "#666666")) +
xlab("") +
ylab("Scores") +
theme_bw()
return(barGraph)
}
DVGraph(t1DV2, t2DV1)
更新:
如果你想要做您在您的評論問什么,一個快速解決的是認識到使用substitute()
迫使你的載體是一個列表,但您可以強制其使用是一個字符as.character(substitute())
,如下所示:
createFrame <- function (DV1, DV2) {
extractCols <- c("group", as.character(substitute(DV1)), as.character(substitute(DV2)))
newFrame <- df[,extractCols]
return(newFrame)
}
createFrame(t1DV1, t2DV1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.