我正在从SPSS转到R系统进行数据分析,我想写一个可以用于未来大多数分析的scrpit。为了检查正态性,我想绘制每个连续变量的直方图、QQ图和降维图。 为此,我希望R能够生成数据集中所有连续变量的qq图,并将变量作为标题。 我设法做到这一点,首先选择所有的数字变量,并将它们存储为数据。 接下来我尝试使用apply来生成所有列的qqplot。我成功地做到了,但不幸的是,即使我努力了一天多,也没有成功得到正确的标题。我需要知道如何编写代码来自动取变量(x)的名称作为标题。有人知道如何解决这个问题吗?
这是wat我做的,但根本没用。
apply(data.numerical, 2, function(x) {ggqqplot(x, title=colnames(data.numerical)[x])})
先谢谢你!
Jeroen
欢迎来到Stack Overflow,也欢迎来到R! 首先我将提供一个解决方案,并提供一些今后在Stack Overflow上提问的技巧。然后我会提供一个解释,为什么你的尝试没有成功。
所以我是这样做的,这在某些方面并不是... 该 与你尝试的不同。
## Specify non-base packages needed
library(ggpubr)
## Generate example data
set.seed(123)
data.numerical <- data.frame(a = rnorm(100), b = rnorm(100))
## Make QQ plot for each column with the column's name as the title
sapply(names(data.numerical), function(x) {
print(ggqqplot(data = data.numerical, x = x, title = x))
})
## Or, equivalently
plots <- lapply(names(data.numerical), function(x) {
ggqqplot(data = data.numerical, x = x, title = x)
})
plots[[1]]
plots[[2]]
这是结果,你可以看到这些图都有适当的名字。
请注意我在代码中加入的内容 之前 绘图代码,指定我使用的软件包,并给其他人提供一个简单的方法来重现我的数据。以后问问题的时候,请提供这些东西,它们给我们提供了我们所谓的最小可重现的例子,这有助于我们帮助你。
如果我们看一下 help("ggqqplot")
,我们将看到函数期望的是 data
栏以及要指定的 x
要绘制。所以,与其说是 apply()
在列上,我 sapply()
在名称上注明 x
这样一来。这也有助于 title
争论;因为我 sapply()
在名字上,我可以直接提供给。title
争论。
最重要的是 colnames(data.numerical)[x]
并没有做我认为你认为它在做的事情。在你的尝试中。x
是 不 栏目索引,而是一个 整列的数据框. 所以,它并没有像你可能期待的那样,将列名子集化。
欢迎你的加入! 为了加强@duckmayer的一些观点。
expss
用户(提示,提示)。 不要重新发明车轮。既然我碰巧有 编写函数 来检查单变量发行版,我会用它。 没有说它是最好的,但它是这样的。 在实际情况中,你会发现dplyr::select_if可以很容易地从你的数据集中只选择数字变量。
library(dplyr)
library(purrr)
library(CGPfunctions)
playdata <- mtcars %>% select(hp, mpg, qsec)
titlevar <- names(playdata)
playdata %>% purrr::map2(.y = titlevar, ~ SeeDist(.x, whatplots = "d", title = .y))
#> Warning: There are 7 modal values displaying just the first 3
#> $hp
#> ------------------------------------------------------------------------------
#> .x
#>
#> length n NAs unique 0s mean meanCI'
#> 32 32 0 22 0 146.69 121.97
#> 100.0% 0.0% 0.0% 171.41
#>
#> .05 .10 .25 median .75 .90 .95
#> 63.65 66.00 96.50 123.00 180.00 243.50 253.55
#>
#> range sd vcoef mad IQR skew kurt
#> 283.00 68.56 0.47 77.10 83.50 0.73 -0.14
#>
#> lowest : 52.00, 62.00, 65.00, 66.00 (2), 91.00
#> highest: 215.00, 230.00, 245.00 (2), 264.00, 335.00
#>
#> ' 95%-CI (classic)
#>
#>
#> $mpg
#> ------------------------------------------------------------------------------
#> .x
#>
#> length n NAs unique 0s mean meanCI'
#> 32 32 0 25 0 20.09 17.92
#> 100.0% 0.0% 0.0% 22.26
#>
#> .05 .10 .25 median .75 .90 .95
#> 12.00 14.34 15.43 19.20 22.80 30.09 31.30
#>
#> range sd vcoef mad IQR skew kurt
#> 23.50 6.03 0.30 5.41 7.38 0.61 -0.37
#>
#> lowest : 10.40 (2), 13.30, 14.30, 14.70, 15.00
#> highest: 26.00, 27.30, 30.40 (2), 32.40, 33.90
#>
#> ' 95%-CI (classic)
#>
#>
#> $qsec
#> ------------------------------------------------------------------------------
#> .x
#>
#> length n NAs unique 0s mean meanCI'
#> 32 32 0 30 0 17.85 17.20
#> 100.0% 0.0% 0.0% 18.49
#>
#> .05 .10 .25 median .75 .90 .95
#> 15.05 15.53 16.89 17.71 18.90 19.99 20.10
#>
#> range sd vcoef mad IQR skew kurt
#> 8.40 1.79 0.10 1.42 2.01 0.37 0.34
#>
#> lowest : 14.50, 14.60, 15.41, 15.50, 15.84
#> highest: 19.90, 20.00, 20.01, 20.22, 22.90
#>
#> ' 95%-CI (classic)