Commit 105b9543 authored by wuzekai's avatar wuzekai

Initial commit

parent 6628038b

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

radiant.basics @ c0e10c0d
Subproject commit c0e10c0d4fd378c339353a2a7c082ed50c66e4b7
^CRAN-RELEASE$
^.*\.Rproj$
^\.Rproj\.user$
^\.travis\.yml$
build/
docs/
vignettes/
_pkgdown.yml
cran-comments.md
radiant.basics.code-workspace
^CRAN-SUBMISSION$
.Rproj.user
.Rhistory
.Rapp.history
.RData
.Ruserdata
radiant.basics.Rproj
.DS_Store
revdep/
cran-comments.md
docs/
language: r
cache: packages
r:
- oldrel
- release
- devel
warnings_are_errors: true
sudo: required
dist: trusty
r_packages:
- devtools
r_github_packages:
- trestletech/shinyAce
- radiant-rstats/radiant.data
## based on https://www.datacamp.com/community/tutorials/cd-package-docs-pkgdown-travis
after_success:
- Rscript -e 'pkgdown::build_site()'
deploy:
provider: pages
skip-cleanup: true
github-token: $GITHUB_PAT
keep-history: true
local-dir: docs
on:
branch: master
This package was submitted to CRAN on 2019-07-29.
Once it is accepted, delete this file and tag the release (commit e39ce5d3d8).
Version: 1.6.6
Date: 2024-05-15 02:25:12 UTC
SHA: f2b85d9412496c91fd69fbcd61535de79b780b3e
Package: radiant.basics
Type: Package
Title: Basics Menu for Radiant: Business Analytics using R and Shiny
Version: 1.6.6
Date: 2024-5-14
Authors@R: person("Vincent", "Nijs", , "radiant@rady.ucsd.edu", c("aut", "cre"))
Description: The Radiant Basics menu includes interfaces for probability
calculation, central limit theorem simulation, comparing means and proportions,
goodness-of-fit testing, cross-tabs, and correlation. The application extends
the functionality in 'radiant.data'.
Depends:
R (>= 4.3.0),
radiant.data (>= 1.6.6)
Imports:
ggplot2 (>= 2.2.1),
scales (>= 0.4.0),
dplyr (>= 1.0.7),
tidyr (>= 0.8.2),
magrittr (>= 1.5),
shiny (>= 1.8.1),
psych (>= 1.8.3.3),
import (>= 1.1.0),
lubridate (>= 1.7.4),
polycor (>= 0.7.10),
patchwork (>= 1.0.0),
shiny.i18n,
rlang (>= 1.0.6)
Suggests:
testthat (>= 2.0.0),
pkgdown (>= 1.1.0),
markdown (>= 1.3)
URL: https://github.com/radiant-rstats/radiant.basics/,
https://radiant-rstats.github.io/radiant.basics/,
https://radiant-rstats.github.io/docs/
BugReports: https://github.com/radiant-rstats/radiant.basics/issues/
License: AGPL-3 | file LICENSE
LazyData: true
Encoding: UTF-8
Language: en-US
RoxygenNote: 7.3.2
This diff is collapsed.
# Generated by roxygen2: do not edit by hand
S3method(plot,clt)
S3method(plot,compare_means)
S3method(plot,compare_props)
S3method(plot,correlation)
S3method(plot,cross_tabs)
S3method(plot,goodness)
S3method(plot,homo_variance_test)
S3method(plot,normality_test)
S3method(plot,prob_binom)
S3method(plot,prob_chisq)
S3method(plot,prob_disc)
S3method(plot,prob_expo)
S3method(plot,prob_fdist)
S3method(plot,prob_lnorm)
S3method(plot,prob_norm)
S3method(plot,prob_pois)
S3method(plot,prob_tdist)
S3method(plot,prob_unif)
S3method(plot,single_mean)
S3method(plot,single_prop)
S3method(print,rcorr)
S3method(summary,compare_means)
S3method(summary,compare_props)
S3method(summary,correlation)
S3method(summary,cross_tabs)
S3method(summary,goodness)
S3method(summary,homo_variance_test)
S3method(summary,normality_test)
S3method(summary,prob_binom)
S3method(summary,prob_chisq)
S3method(summary,prob_disc)
S3method(summary,prob_expo)
S3method(summary,prob_fdist)
S3method(summary,prob_lnorm)
S3method(summary,prob_norm)
S3method(summary,prob_pois)
S3method(summary,prob_tdist)
S3method(summary,prob_unif)
S3method(summary,single_mean)
S3method(summary,single_prop)
export(clt)
export(compare_means)
export(compare_props)
export(cor2df)
export(correlation)
export(cross_tabs)
export(goodness)
export(homo_variance_test)
export(normality_test)
export(prob_binom)
export(prob_chisq)
export(prob_disc)
export(prob_expo)
export(prob_fdist)
export(prob_lnorm)
export(prob_norm)
export(prob_pois)
export(prob_tdist)
export(prob_unif)
export(radiant.basics)
export(radiant.basics_viewer)
export(radiant.basics_window)
export(single_mean)
export(single_prop)
import(ggplot2)
import(radiant.data)
import(shiny)
importFrom(dplyr,arrange)
importFrom(dplyr,bind_cols)
importFrom(dplyr,count)
importFrom(dplyr,filter)
importFrom(dplyr,funs)
importFrom(dplyr,group_by_at)
importFrom(dplyr,left_join)
importFrom(dplyr,mutate)
importFrom(dplyr,mutate_all)
importFrom(dplyr,mutate_if)
importFrom(dplyr,rename)
importFrom(dplyr,select)
importFrom(dplyr,summarise)
importFrom(dplyr,summarise_all)
importFrom(dplyr,summarise_at)
importFrom(graphics,pairs)
importFrom(graphics,par)
importFrom(graphics,plot)
importFrom(graphics,points)
importFrom(graphics,strwidth)
importFrom(graphics,text)
importFrom(import,from)
importFrom(lubridate,is.Date)
importFrom(magrittr,"%<>%")
importFrom(magrittr,"%>%")
importFrom(magrittr,divide_by)
importFrom(magrittr,set_colnames)
importFrom(magrittr,set_names)
importFrom(magrittr,set_rownames)
importFrom(patchwork,plot_annotation)
importFrom(patchwork,wrap_plots)
importFrom(polycor,hetcor)
importFrom(psych,corr.test)
importFrom(radiant.data,launch)
importFrom(rlang,.data)
importFrom(scales,percent)
importFrom(stats,binom.test)
importFrom(stats,chisq.test)
importFrom(stats,cor.test)
importFrom(stats,cov)
importFrom(stats,dbinom)
importFrom(stats,dchisq)
importFrom(stats,dexp)
importFrom(stats,df)
importFrom(stats,dlnorm)
importFrom(stats,dnorm)
importFrom(stats,dpois)
importFrom(stats,dt)
importFrom(stats,dunif)
importFrom(stats,na.omit)
importFrom(stats,p.adjust)
importFrom(stats,pbinom)
importFrom(stats,pchisq)
importFrom(stats,pexp)
importFrom(stats,pf)
importFrom(stats,plnorm)
importFrom(stats,pnorm)
importFrom(stats,ppois)
importFrom(stats,prop.test)
importFrom(stats,pt)
importFrom(stats,punif)
importFrom(stats,qbinom)
importFrom(stats,qchisq)
importFrom(stats,qexp)
importFrom(stats,qf)
importFrom(stats,qlnorm)
importFrom(stats,qnorm)
importFrom(stats,qpois)
importFrom(stats,qt)
importFrom(stats,qunif)
importFrom(stats,rbinom)
importFrom(stats,relevel)
importFrom(stats,rexp)
importFrom(stats,rnorm)
importFrom(stats,runif)
importFrom(stats,sd)
importFrom(stats,setNames)
importFrom(stats,symnum)
importFrom(stats,t.test)
importFrom(stats,wilcox.test)
importFrom(tidyr,gather)
importFrom(tidyr,spread)
importFrom(utils,combn)
# radiant.basics 1.6.6.0
* Require Shiny 1.8.1. Adjustments related to icon-buttons were made to address a breaking change in Shiny 1.8.1
* Reverting changes that removed `req(input$dataset)` in different places
# radiant.basics 1.6.1.0
* Require shiny 1.8.0. This fixes a bug in the shiny 1.7 versions that caused issues with all radiant packages.
* Added `.groups` arguments as needed to avoid messages about grouping from dplyr
# radiant.basics 1.6.0.0
* Relabeled web app to "Radiant for R" to distinguish from "Radiant for Python"
* Addressed package documentation issue connected to a change in roxygen2
* Simplified and improved color assignment for discrete probability distributions in the probability calculator
# radiant.basics 1.5.0.0
* Improvements to screenshot feature. Navigation bar is omitted and the image is adjusted to the length of the UI.
* Removed all references to `aes_string` which is being deprecated in ggplot soon
* Code cleanup
# radiant.basics 1.4.5.0
* Fixed plot titles for _Basics > Central Limit Theorem_
# radiant.basics 1.4.4.0
* Added option to create screenshots of settings on a page. Approach is inspired by the snapper package by @yonicd
# radiant.basics 1.4.1.0
* Fixed `is_empty` function clash with `rlang`
* Adjustments to work with the latest version of `shiny` and `bootstrap4`
# radiant.basics 1.4.0.0
Adjusted DESCRIPTION file by adding 'markdown' to the Suggests section. This addresses an issue in radiant.basics, similar to the issue linked below
https://github.com/radiant-rstats/radiant/issues/157. This is issue originated with https://github.com/yihui/knitr/issues/1864
# radiant.basics 1.3.4.0
* Minor adjustments in anticipation of dplyr 1.0.0
# radiant.basics 1.3.0.0
* Documentation updates to link to new video tutorials
* Use `patchwork` for grouping multiple plots together
* Use `polycor::hetcor` to calculate correlations for a mix of numeric and categorical variables
* Updated correlation plot that accommodates a mix of numeric and categorical variables
* Fix for sd estimate in `single_prop` and `compare_prop` functions
* Add dimension labels to all tables in _Basics > Cross-tabs_
# radiant.basics 1.2.0.0
* Update action buttons that initiate calculations when one or more relevant inputs are changed. When, for example, a CLT simulation should be updated, a spinning "refresh" icon will be shown
* Allow fractions as input for the `Goodness of fit` and `Probability calculator > Discrete` tools
# radiant.basics 1.1.4.0
* Summary statistics provided for _single_mean_, _single_prop_, _compare_means_, and _compare_props_ are now consistent
* `n_missing` were not show correctly for _compare_means_ and _compare_props_
# radiant.basics 1.1.3.0
* Fix for code generation from the probability calculator when the `distribution` type is set to binomial
* Fix for input restoration from a state file for the probability calculator. For the _value_ or _probability_ inputs two sided values might be restored when only a one-sided input was previously specified
# radiant.basics 1.1.1.0
* Documentation updates (i.e., key functions for each tool)
* Improvements in `goodness` and `prob_dics` to allow fractions in generated code sent to _Report > rmd_ or _Report > R_
* Improved checks for variables that show no variation
* Numerous small code changes to support enhanced auto-completion, tooltips, and annotations in shinyAce 0.4.1
# radiant.basics 1.0.0.0
* Flexible adjustment of level of jitter in `plot.correlation`
* Support for variables of type `ts`
# radiant.basics 0.9.9.0
* Various fixes to address (soft) deprecations in dplyr 0.8.0
# radiant.basics 0.9.8.0
* Option to pass additional arguments to `shiny::runApp` when starting radiant such as the port to use. For example, radiant.basics::radiant.basics("https://github.com/radiant-rstats/docs/raw/gh-pages/examples/demo-dvd-rnd.state.rda", port = 8080)
* Catch settings where the number of levels in a comparison of means or proportions is the same as the number of rows in the data (e.g., grouping by a unique identifier)
* Show significant stars for `Compare means` and `Compare proportions` even when `Show additional output` is not selected
* `ci` in summary table `compare_means` and `compare_props` should be margin of err (`me`)
* Option to use `Z-test` in `single_prop`
# radiant.basics 0.9.7.2
* Load a state file on startup by providing a (relative) file path or a url
# radiant.basics 0.9.7.0
* Using [`shinyFiles`](https://github.com/thomasp85/shinyFiles) to provide convenient access to data located on a server
# radiant.basics 0.9.5.0
## Major changes
* Various changes to the code to accommodate the use of `shiny::makeReactiveBinding`. The advantage is that the code generated for _Report > Rmd_ and _Report > R_ will no longer have to use `r_data` to store and access data. This means that code generated and used in the Radiant browser interface will be directly usable without the browser interface as well.
# radiant.basics 0.9.2.0
## Major changes
* Upload and download data using the Rstudio file browser. Allows using relative paths to files (e.g., data or images inside an Rstudio project)
* Variable selection in Summary tabs only to simplify Plot interface
## Bug fixes
* Fix for [#43](https://github.com/radiant-rstats/radiant/issues/43) where scatter plot was not shown for a dataset with less than 1,000 rows
# radiant.basics 0.9.0.4
## Minor changes
* Format tables with thousand separator
* Added print method for return from `correlation`
# radiant.basics 0.9.0.3
## Minor changes
* Enhanced keyboard shortcuts
* `summary.single_prop` will not print row numbers
* Added log.normal as an option in the probability calculator
* The correlation plot now has an option to select a sample of data for scatter plots (e.g., 1K, 5K, 10K, or All)
# radiant.basics 0.8.9.0
## Minor changes
* Upgraded broom dependency to 0.4.3
* Upgraded dplyr dependency to 0.7.4
* Upgraded tidyr dependency to 0.7.2
* Fixed CI printing error for `compare_prop`
* Applied `styler` to code
* Long lines of code generated for _Report > Rmd_ and _Report > R_ will be wrapped to enhance readability
# radiant.basics 0.8.3.0
## Minor changes
* `correlation` defaults to all variables if no value for `var` is provided
* Renamed methods `summary.correlation_` and `plot.correlation_` to `summary.correlation` and `plot.correlation`
* Added `tab` argument to `goodness` and `cross_tabs` so a table object can be passed directly
* Documentation updates
* Scatter plots in _Correlation > Plot_ are now based on 1,000 data points by default. Use _Report > Rmd_ or _Report > R_ to adjust (e.g., `plot(result, n = -1)`)
## Bug fixes
* Fix for level ordering in goodness-of-fit expected-values plot
* Code clean-up and various minor fixes and improvements
# radiant.basics 0.8.0.0
## Major changes
- Show dataset name in output if dataframe passed directly to analysis function
- Scatter plots in Basics > Correlation > Plot now based on 1,000 data points by default. Add n = -1 to use all data points
- As an alternative to using the Estimate button to run a model you can now also use CTRL-enter or CMD-enter
- Use ALT-enter to put code into _Report > Rmd_ or _Report > R_
- Documentation added on how to customize plots
## Bug fixes
- Fixed correlation dropdown. Correlations did not change when method was changed (thanks @Fiordmaster)
- Improved formatting for small negative values in Basics > Correlation
- Convert numeric bounds to integer in Basics > Probability calculator > Binomial to avoid warnings
## Deprecated
- Use of *_each is deprecated
# to avoid 'no visible binding for global variable' NOTE
globalVariables(c(
".", "n", "se", "me", "Freq", "ci", "col1", "n",
"y", "parameter", "variable", "dec", "df1", "df2", "lambda",
"lb", "meanlog", "p_elb", "p_eub", "p_int", "p_lb", "p_lelb",
"p_leub", "p_ub", "plb", "pub", "rate", "sdlog", "stdev",
"ub", "v", "v_lb", "v_ub", "vlb", "vp_elb", "vp_eub", "vp_int",
"vp_lb", "vp_lelb", "vp_leub", "vp_ub", "vub", "n_miss"
))
#' radiant.basics
#'
#' @name radiant.basics
#' @import radiant.data shiny ggplot2
#' @importFrom dplyr mutate_all mutate_if summarise_all summarise_at funs rename bind_cols select filter group_by_at summarise arrange mutate count left_join
#' @importFrom tidyr gather spread
#' @importFrom scales percent
#' @importFrom magrittr %>% %<>% set_rownames set_colnames set_names divide_by
#' @importFrom graphics pairs par points strwidth text
#' @importFrom patchwork wrap_plots plot_annotation
#' @importFrom stats na.omit binom.test chisq.test cor.test cov dbinom dchisq dexp df dnorm dpois dt dunif p.adjust pbinom pchisq pexp pf pnorm ppois prop.test pt punif qbinom qchisq qexp qf qpois qt qunif qnorm rbinom dlnorm plnorm qlnorm relevel sd setNames symnum t.test wilcox.test
#' @importFrom utils combn
#' @importFrom import from
NULL
#' Newspaper readership
#' @details Newspaper readership data for 580 consumers. Description provided in attr(newspaper,"description")
#' @docType data
#' @keywords datasets
#' @name newspaper
#' @usage data(newspaper)
#' @format A data frame with 580 rows and 2 variables
NULL
#' Car brand consideration
#' @details Survey data of consumer purchase intentions. Description provided in attr(consider,"description")
#' @docType data
#' @keywords datasets
#' @name consider
#' @usage data(consider)
#' @format A data frame with 1000 rows and 2 variables
NULL
#' Demand in the UK
#' @details Survey data of consumer purchase intentions. Description provided in attr(demand_uk,"description")
#' @docType data
#' @keywords datasets
#' @name demand_uk
#' @usage data(demand_uk)
#' @format A data frame with 1000 rows and 2 variables
NULL
#' Salaries for Professors
#' @details 2008-2009 nine-month salary for professors in a college in the US. Description provided in attr(salary,description")
#' @docType data
#' @keywords datasets
#' @name salary
#' @usage data(salary)
#' @format A data frame with 397 rows and 6 variables
NULL
#' Central Limit Theorem simulation
#'
#' @details See \url{https://radiant-rstats.github.io/docs/basics/clt.html} for an example in Radiant
#'
#' @param dist Distribution to simulate
#' @param n Sample size
#' @param m Number of samples
#' @param norm_mean Mean for the normal distribution
#' @param norm_sd Standard deviation for the normal distribution
#' @param binom_size Size for the binomial distribution
#' @param binom_prob Probability for the binomial distribution
#' @param unif_min Minimum for the uniform distribution
#' @param unif_max Maximum for the uniform distribution
#' @param expo_rate Rate for the exponential distribution
#'
#' @importFrom stats rexp rnorm runif rbinom
#'
#' @return A list with the name of the Distribution and a matrix of simulated data
#'
#' @examples
#' clt("Uniform", 10, 10, unif_min = 10, unif_max = 20)
#'
#' @export
clt <- function(dist, n = 100, m = 100,
norm_mean = 0, norm_sd = 1,
binom_size = 10, binom_prob = 0.2,
unif_min = 0, unif_max = 1,
expo_rate = 1) {
if (dist == "Uniform") {
sim <- matrix(runif(n * m, min = unif_min, max = unif_max), n, m)
} else if (dist == "Normal") {
sim <- matrix(rnorm(n * m, mean = norm_mean, sd = norm_sd), n, m)
} else if (dist == "Exponential") {
sim <- matrix(rexp(n * m, rate = expo_rate), n, m)
} else if (dist == "Binomial") {
sim <- matrix(rbinom(n * m, size = binom_size, prob = binom_prob), n, m)
}
add_class(list(dist = dist, sim = sim), "clt")
}
#' Plot method for the Central Limit Theorem simulation
#'
#' @details See \url{https://radiant-rstats.github.io/docs/basics/clt.html} for an example in Radiant
#'
#' @param x Return value from \code{\link{clt}}
#' @param stat Statistic to use (sum or mean)
#' @param bins Number of bins to use
#' @param ... further arguments passed to or from other methods
#'
#' @examples
#' clt("Uniform", 100, 100, unif_min = 10, unif_max = 20) %>% plot()
#'
#' @export
plot.clt <- function(x, stat = "sum", bins = 15, ...) {
if (stat == "sum") {
sstat <- data.frame(stat = colSums(x$sim), stringsAsFactors = FALSE)
} else {
sstat <- data.frame(stat = colMeans(x$sim), stringsAsFactors = FALSE)
}
m <- dim(x$sim)[2]
data1 <- data.frame(sample_1 = x$sim[, 1], stringsAsFactors = FALSE)
datam <- data.frame(sample_m = x$sim[, m], stringsAsFactors = FALSE)
plot_list <- list()
plot_list[[1]] <- visualize(data1, xvar = "sample_1", bins = bins, custom = TRUE) +
labs(x = "Histogram of sample #1")
plot_list[[2]] <- visualize(datam, xvar = "sample_m", bins = bins, custom = TRUE) +
labs(x = paste0("Histogram of sample #", m))
plot_list[[3]] <- visualize(sstat, xvar = "stat", bins = bins, custom = TRUE) +
labs(x = ifelse(stat == "sum", "Histogram of sample sums", "Histogram of sample means"))
plot_list[[4]] <- visualize(sstat, xvar = "stat", type = "density", custom = TRUE) +
stat_function(fun = dnorm, args = list(
mean = mean(sstat[[1]]),
sd = sd(sstat[[1]])
), color = "black", size = 1) +
labs(x = ifelse(stat == "sum", "Density of sample sums", "Density of sample means"))
patchwork::wrap_plots(plot_list, ncol = 2) + patchwork::plot_annotation(title = glue("CLT: {x$dist} distribution"))
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
############################################
## Homogeneity of variance test - 空壳版(照抄 single_mean)
############################################
# Homogeneity of variance tests for radiant.basics
#' @export
homo_variance_test <- function(dataset, var, group, method = "levene",
conf_lev = .95, data_filter = "",
envir = parent.frame()) {
df_name <- if (is_string(dataset)) dataset else deparse(substitute(dataset))
dataset <- get_data(dataset, var, group, filt = data_filter, na.rm = TRUE, envir = envir)
x <- dataset[[var]]
g <- dataset[[group]]
if (!is.numeric(x)) stop(i18n$t("Variable must be numeric"))
if (length(unique(g)) < 2) stop(i18n$t("Grouping variable must have at least 2 levels"))
## ---- 空壳结果 ----
res <- tibble::tribble(
~Test, ~Statistic, ~p.value,
"Levene", 0.42, 0.52,
"Bartlett", 0.38, 0.54,
"Fligner", 0.45, 0.50
)
dat_summary <- dataset %>%
group_by(!!sym(group)) %>%
summarise(
n = n(),
mean = mean(!!sym(var), na.rm = TRUE),
sd = sd(!!sym(var), na.rm = TRUE),
.groups = "drop"
)
## 绘图数据
plot_obj <- list(hist = list(type = "hist", data = dataset, var = var, group = group),
density = list(type = "density", data = dataset, var = var, group = group),
boxplot = list(type = "boxplot", data = dataset, var = var, group = group))
as.list(environment()) %>% add_class("homo_variance_test")
}
# Summary method
#' @export
summary.homo_variance_test <- function(object, dec = 3, ...) {
cat("Homogeneity of variance tests\n")
cat("Data :", object$df_name, "\n")
if (!is.empty(object$data_filter)) {
cat("Filter :", gsub("\\n", "", object$data_filter), "\n")
}
cat("Variable :", object$var, "\n")
cat("Group :", object$group, "\n\n")
## 打印统计量表
object$res %>%
as.data.frame(stringsAsFactors = FALSE) %>%
format_df(dec = dec) %>%
print(row.names = FALSE)
cat("\n")
}
# Plot method
#' @export
plot.homo_variance_test <- function(x, plots = c("boxplot", "density"),
shiny = FALSE, custom = FALSE, ...) {
plot_list <- list()
if ("boxplot" %in% plots) {
plot_list[[which("boxplot" == plots)]] <-
ggplot(x$dat_summary, aes(x = .data[[x$group]], y = .data[[x$var]])) +
geom_boxplot(fill = "lightblue", alpha = 0.7)
}
if ("density" %in% plots) {
plot_list[[which("density" == plots)]] <-
ggplot(x$dat_summary, aes(x = .data[[x$var]], fill = .data[[x$group]])) +
geom_density(alpha = 0.5)
}
if ("hist" %in% plots) {
plot_list[[which("hist" == plots)]] <-
ggplot(x$dat_summary, aes(x = .data[[x$var]], fill = .data[[x$group]])) +
geom_histogram(alpha = 0.5, position = "identity", bins = 30)
}
if (length(plot_list) == 0) return(invisible())
patchwork::wrap_plots(plot_list, ncol = 1) %>%
{ if (shiny) print(.) else print(.) }
invisible(x)
}
\ No newline at end of file
############################################
## Normality test
############################################
# Batch normality tests for radiant.basics
#
#' @export
normality_test <- function(dataset, var, method = "shapiro",
conf_lev = .95, data_filter = "",
envir = parent.frame()) {
df_name <- if (is_string(dataset)) dataset else deparse(substitute(dataset))
dataset <- get_data(dataset, var, filt = data_filter, na.rm = TRUE, envir = envir)
x <- dataset[[var]]
if (!is.numeric(x)) stop(i18n$t("Variable must be numeric"))
## ---- 空壳结果 ----
res <- tibble::tribble(
~Test, ~Statistic, ~p.value,
"Shapiro-Wilk", 0.99, 0.12,
"Kolmogorov-Smirnov", 0.05, 0.30,
"Anderson-Darling", 0.80, 0.25
)
dat_summary <- tibble::tribble(
~mean, ~n, ~n_missing, ~sd, ~se,
mean(x, na.rm = TRUE), length(x), sum(is.na(x)), sd(x, na.rm = TRUE), sd(x, na.rm = TRUE)/sqrt(length(x))
)
## 绘图数据
plot_obj <- list(qq = list(type = "qq", data = x),
hist = list(type = "hist", data = x),
pp = list(type = "pp", data = x),
density = list(type = "density", data = x))
as.list(environment()) %>% add_class("normality_test")
}
# Summary method
#' @export
summary.normality_test <- function(object, dec = 3, ...) {
cat("Normality tests\n")
cat("Data :", object$df_name, "\n")
if (!is.empty(object$data_filter)) {
cat("Filter :", gsub("\\n", "", object$data_filter), "\n")
}
cat("Variable :", object$var, "\n\n")
## 打印统计量表
object$res %>%
as.data.frame(stringsAsFactors = FALSE) %>%
format_df(dec = dec) %>%
print(row.names = FALSE)
cat("\n")
}
# Plot method
#' @export
plot.normality_test <- function(x, plots = c("qq", "hist"),
shiny = FALSE, custom = FALSE, ...) {
plot_list <- list()
if ("qq" %in% plots) {
plot_list[[which("qq" == plots)]] <-
ggplot(data.frame(y = x$x), aes(sample = y)) +
stat_qq() + stat_qq_line()
}
if ("hist" %in% plots) {
plot_list[[which("hist" == plots)]] <-
ggplot(data.frame(y = x$x), aes(y)) +
geom_histogram(fill = "blue", bins = 30)
}
if ("pp" %in% plots) {
plot_list[[which("pp" == plots)]] <-
ggplot(data.frame(y = x$x), aes(sample = y)) +
stat_pp_band() + stat_pp_line() + stat_pp_point()
}
if ("density" %in% plots) {
plot_list[[which("density" == plots)]] <-
ggplot(data.frame(y = x$x), aes(y)) +
geom_density(fill = "blue", alpha = 0.5)
}
if (length(plot_list) == 0) return(invisible())
patchwork::wrap_plots(plot_list, ncol = 1) %>%
{ if (shiny) print(.) else print(.) }
invisible(x)
}
\ No newline at end of file
This diff is collapsed.
#' Launch radiant.basics in the default browser
#'
#' @description Launch radiant.basics in the default web browser
#' @details See \url{https://radiant-rstats.github.io/docs/} for documentation and tutorials
#'
#' @param state Path to state file to load
#' @param ... additional arguments to pass to shiny::runApp (e.g, port = 8080)
#'
#' @importFrom radiant.data launch
#'
#' @examples
#' \dontrun{
#' radiant.basics()
#' }
#' @export
radiant.basics <- function(state, ...) radiant.data::launch(package = "radiant.basics", run = "browser", state, ...)
#' Launch radiant.basics in an Rstudio window
#'
#' @details See \url{https://radiant-rstats.github.io/docs/} for documentation and tutorials
#'
#' @param state Path to state file to load
#' @param ... additional arguments to pass to shiny::runApp (e.g, port = 8080)
#'
#' @importFrom radiant.data launch
#'
#' @examples
#' \dontrun{
#' radiant.basics_window()
#' }
#' @export
radiant.basics_window <- function(state, ...) radiant.data::launch(package = "radiant.basics", run = "window", state, ...)
#' Launch radiant.basics in the Rstudio viewer
#'
#' @details See \url{https://radiant-rstats.github.io/docs/} for documentation and tutorials
#'
#' @param state Path to state file to load
#' @param ... additional arguments to pass to shiny::runApp (e.g, port = 8080)
#'
#' @importFrom radiant.data launch
#'
#' @examples
#' \dontrun{
#' radiant.basics_viewer()
#' }
#' @export
radiant.basics_viewer <- function(state, ...) radiant.data::launch(package = "radiant.basics", run = "viewer", state, ...)
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
## build for mac
app <- basename(getwd())
curr <- setwd("../")
f <- devtools::build(app)
system(paste0("R CMD INSTALL --build ", f))
setwd(curr)
## build for windows
rv <- R.Version()
rv <- paste(rv$major, substr(rv$minor, 1, 1), sep = ".")
rvprompt <- readline(prompt = paste0("Running for R version: ", rv, ". Is that what you wanted y/n: "))
if (grepl("[nN]", rvprompt))
stop("Change R-version using Rstudio > Tools > Global Options > Rversion")
## build for windows
setwd(rstudioapi::getActiveProject())
f <- devtools::build(binary = TRUE)
devtools::install(upgrade = "never")
fl <- list.files(pattern = "*.zip", path = "../", full.names = TRUE)
for (f in fl) {
print(glue::glue("Copying: {f}"))
file.copy(f, "C:/Users/vnijs/Dropbox/r-packages/", overwrite = TRUE)
unlink(f)
}
#options(repos = c(RSM = "https://radiant-rstats.github.io/minicran"))
#install.packages("radiant.data", type = "binary")
# remove.packages(c("radiant.data", "radiant.model"))
#install.packages("radiant.update")
# radiant.update::radiant.update()
library(shiny.i18n)
# file with translations
i18n <- Translator$new(translation_csvs_path = "../translations")
# change this to zh
i18n$set_translation_language("zh")
## sourcing from radiant.data
options(radiant.path.data = system.file(package = "radiant.data"))
source(file.path(getOption("radiant.path.data"), "app/global.R"), encoding = getOption("radiant.encoding", default = "UTF-8"), local = TRUE)
ifelse(grepl("radiant.basics", getwd()) && file.exists("../../inst"), "..", system.file(package = "radiant.basics")) %>%
options(radiant.path.basics = .)
## setting path for figures in help files
addResourcePath("figures_basics", "tools/help/figures/")
## setting path for www resources
addResourcePath("www_basics", file.path(getOption("radiant.path.basics"), "app/www/"))
## loading urls and ui
source("init.R", encoding = getOption("radiant.encoding", "UTF-8"), local = TRUE)
options(radiant.url.patterns = make_url_patterns())
## if radiant.data is not in search main function from dplyr etc. won't be available
if (!"package:radiant.basics" %in% search() &&
isTRUE(getOption("radiant.development")) &&
getOption("radiant.path.basics") == "..") {
options(radiant.from.package = FALSE)
} else {
options(radiant.from.package = TRUE)
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
radiant.data @ 8981e238
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
radiant.design @ faefeb7e
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
radiant.model @ f18fa8c5
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment