我正面臨著一個挑戰,我似乎無法弄清楚(也是在搜索了www之后)。
給定一個資料框架:
我正面臨著一個挑戰。
給定一個資料框架:
糖尿病 <- data.frame(Age = c(20,23,45,77), Diabetes = c('no', 'no', 'yes', 'yes'))
$ Age </span>dbl> 20, 23, 45, 77
$ Diabetes <fct> no, no, yes, yes
我試圖為兩種糖尿病的結果繪制密度曲線,并在平均值處加入垂直線。
plot_numeric < - function(dataset, 預測器,結果){
p1 <- dataset %> % ggplot(aes_string(x= predictor))
geom_density(fill = 'gray', alpha = 0。 5)
theme_fivethirtyeight()
p2 <- dataset %> % ggplot(aes_string(x = predictor。 填補=結果))
geom_density(alpha = 0.5)
scale_fill_manual(values = c('#999999'/span>。 '#E69F00')
geom_vline(aes_string(xintercept = mean(predictor[結果== 'no']))。 color = '999999')
geom_vline(aes_string(xintercept = mean(predictor[結果== 'yes']))。 color = '#E69F00')
theme_fivethirtyeight()
gridExtra::grid.arrange(p1,p2)
}
plot_numeric(diabetes, 'Age', 'Diabetes')
我收到的錯誤是 "引數不是數字或邏輯:回傳NA",而且平均數的垂直線沒有被包括在內。
當在一個函式之外進行繪圖時,一切都很正常。
如果有任何關于如何解決這個問題的想法,我們將非常感激。
uj5u.com熱心網友回復:
aes_string()函式不再被推薦,而是鼓勵人們按照vignette使用整齊的評價語法。
在您的案例中,mean(predictor[outcome == 'no'])試圖計算一個長度為1的predictor字符被一個長度為1的outcome字符子集的平均值。
為了彌補aes_string()的缺點,你可以使用大括號。
library(ggplot2)
library(magrittr)
糖尿病 <- data. frame(Age = c(20。 23, 45, 77)。 Diabetes = c('no'/span>, 'no'。 'yes', 'yes'))
plot_numeric < - function(dataset, 預測器,結果){
p1 <- dataset %> % ggplot(aes(x = {{預測器}})
geom_density(fill = 'gray', alpha = 0。 5)
p2 <- dataset %> % ggplot(aes(x = {{預測器}。 填充= {{outcome}})
geom_density(alpha = 0.5)
scale_fill_manual(values = c('#999999'/span>。 '#E69F00')
geom_vline()
aes(xintercept = mean({{預測器}}[{{outcome} == 'no']))。
color = '99999'
)
geom_vline()
aes(xintercept = mean({{預測器}}[{{outcome} == 'yes']))。
color = '#E69F00'/span>
)
gridExtra::grid.arrange(p1,p2)
}
plot_numeric(diabetes, Age, Diabetes)

創建于2021-09-21,由reprex軟體包(v2.0.1)創建
。另外,如果你喜歡把你的列名作為字串,你可以使用.data代詞:
library(ggplot2)
library(magrittr)
糖尿病 <- data. frame(Age = c(20。 23, 45, 77)。 Diabetes = c('no'/span>, 'no'。 'yes', 'yes'))
plot_numeric < - function(dataset, 預測器,結果){
p1 <- dataset %>% ggplot(aes(x = . data[[predictor]]))
geom_density(fill = 'gray', alpha = 0。 5)
p2 <- dataset %>% ggplot(aes(x = 。 data[[predictor]], fill= . data[[outcome]]))
geom_density(alpha = 0.5)
scale_fill_manual(values = c('#999999'/span>。 '#E69F00')
geom_vline()
aes(xintercept = mean(. data[[predictor]][. data[[outcome] == 'no']))。
color = '99999'
)
geom_vline()
aes(xintercept = mean(. data[[predictor]][. data[[outcome]] == 'yes']))。
color = '#E69F00'/span>
)
gridExtra::grid.arrange(p1,p2)
}
plot_numeric(diabetes。 "Age", "Diabetes")

創建于2021-09-21,由reprex包(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330197.html
標籤:
