Description: Takes raw csv file from the Google form and updates it for analysis.
Coder name(s): Althea ArchMiller
Load libraries
library(ezknitr)
library(knitr)
library(devtools)
Clear environment and set seed
remove(list=ls())
set.seed(2647)
raw_data <- read.csv(file = "data/google_form_data_raw.csv",
stringsAsFactors = F,
header = T)
str(raw_data)
## 'data.frame': 101 obs. of 14 variables:
## $ Timestamp : chr "2018/07/25 1:16:00 PM CDT" "2018/07/25 1:18:47 PM CDT" "2018/07/25 2:29:22 PM CDT" "2018/07/25 3:01:47 PM CDT" ...
## $ Study.ID..e.g...wsb002.or.jwm040. : chr "wsb028" "jwm019" "wsb015" "wsb013" ...
## $ Reviewer.s.Initials..yours. : chr "AAA" "ADJ" "KV" "FI" ...
## $ Was.this.paper.suitable.for.review.. : chr "True" "True" "True" "True" ...
## $ Was.this.paper.reviewed.. : chr "" "" "" "" ...
## $ Data.readily.available. : chr "False" "True" "False" "True" ...
## $ Was.the.data.pre.processed.or.shared.in.original.raw.format. : chr "Pre-processed" "Pre-processed" "Pre-processed" "Raw format" ...
## $ Code.available : chr "True" "True" "Not applicable (e.g., not analyzed with code-based software)" "False" ...
## $ Analysis.was.entirely.code.based : chr "True" "True" "False" "False" ...
## $ Open.source.file.formats.used. : chr "True" "True" "False" "False" ...
## $ Can.code.be.run.as.is.. : int 5 4 NA NA 5 NA 4 NA NA NA ...
## $ Were.the.study.s.figures.reproduced.. : int 5 5 3 4 5 3 5 NA NA NA ...
## $ Were.the.numbers.in.the.study.s.tables.and.or.results.text.quantitatively.reproduced..: int 5 4 2 4 5 3 4 NA NA NA ...
## $ Were.the.study.s.conclusions.reproduced.. : int 5 4 4 5 5 4 4 NA NA NA ...
The question “Was this study reviewed?” was added after a few survey responses were filled in, so I will update those records with “TRUE”
View responses to this column
table(raw_data$Was.this.paper.reviewed..)
##
##
## 6
## False, author declined to participate (e.g., private data, no time, etc)
## 10
## False, author never responded
## 41
## False, for other reasons not stated above
## 6
## False, unsuitable for review
## 6
## True
## 32
Replace “” with “True”
raw_data$Was.this.paper.reviewed.. <- ifelse(
test = raw_data$Was.this.paper.reviewed.. == "",
yes = "True",
no = raw_data$Was.this.paper.reviewed..)
Double check that it worked
table(raw_data$Was.this.paper.reviewed..)
##
## False, author declined to participate (e.g., private data, no time, etc)
## 10
## False, author never responded
## 41
## False, for other reasons not stated above
## 6
## False, unsuitable for review
## 6
## True
## 38
Create and fill out a new column for “Why not reviewed”
raw_data$Why.not.reviewed <- NA
Fill in with “NA-Was reviewed” for all reviewed studies:
raw_data$Why.not.reviewed[raw_data$Was.this.paper.reviewed..=="True"] <- "NA: Study was reviewed"
If unsuitable, add this information in:
raw_data$Why.not.reviewed[raw_data$Was.this.paper.reviewed..=="False, unsuitable for review"] <-
"Unsuitable for review"
If author never responded, add this information in:
raw_data$Why.not.reviewed[raw_data$Was.this.paper.reviewed..=="False, author never responded"] <-
"No correspondence"
In two cases, a study was initially thought to be not reviewed but it was. One example of this was jwm027, where the author was slow to respond, but eventually did send us data. This was classified incorrectly in Google form as “False, author never responded.” I need to remove this specific data point.
new_data <- raw_data[!(raw_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm027" &
raw_data$Was.this.paper.reviewed.. == "False, author never responded"),]
In the second case, we had to send in a written proposal to a regulatory agency to get the data. We thought that we would not get the proposal accepted, so we thought that we would be unable to review this project. But, in the end, the proposal was accepted and we reviewed this study. I will need to remove the data point that incorrectly files wsb038 as “False, for other reasons not stated above”
new_data <- new_data[!(new_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb038" &
new_data$Was.this.paper.reviewed.. == "False, for other reasons not stated above"),]
What studies was this true for?
new_data$Study.ID..e.g...wsb002.or.jwm040.[new_data$Was.this.paper.reviewed.. ==
"False, author declined to participate (e.g., private data, no time, etc)"]
## [1] "jwm003" "jwm005" "jwm011" "jwm016" "jwm031" "wsb001" "wsb005"
## [8] "wsb039" "wsb037" "jwm036"
I want to classify responses:
new_data$Why.not.reviewed <-
ifelse(test =
new_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm003" |
new_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb039" |
new_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb037" |
new_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb001",
yes = "Author Declined: Proprietary/confidential data",
no = ifelse(test =
new_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm005" |
new_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm031",
yes = "Author Declined: No reason given",
no = ifelse(test =
new_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm011" |
new_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb005" |
new_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm036",
yes = "Author Declined: Not enough time",
no = ifelse(test = new_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm016",
yes = "Author Declined: Data saved for future article",
no = new_data$Why.not.reviewed))
))
What studies was this true for?
new_data$Study.ID..e.g...wsb002.or.jwm040.[new_data$Was.this.paper.reviewed.. ==
"False, for other reasons not stated above"]
## [1] "wsb020" "wsb029" "wsb007" "wsb027" "jwm038"
Classify reasons:
new_data$Why.not.reviewed <-
ifelse(test =
new_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb020",
yes = "Author Declined: Proprietary/confidential data",
no = ifelse(test =
new_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb029" |
new_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm038",
yes = "No correspondence",
no = ifelse(test =
new_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb007" |
new_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb027",
yes = "Author wanted to participate, but did not send data",
no = new_data$Why.not.reviewed)))
Look at results
table(new_data$Why.not.reviewed)
##
## Author Declined: Data saved for future article
## 1
## Author Declined: No reason given
## 2
## Author Declined: Not enough time
## 3
## Author Declined: Proprietary/confidential data
## 5
## Author wanted to participate, but did not send data
## 2
## NA: Study was reviewed
## 38
## No correspondence
## 42
## Unsuitable for review
## 6
sum(table(new_data$Why.not.reviewed))
## [1] 99
new_data$journal[grep("jwm", x = new_data$Study.ID..e.g...wsb002.or.jwm040.)] <-
"JWM"
new_data$journal[grep("wsb", x = new_data$Study.ID..e.g...wsb002.or.jwm040.)] <-
"WSB"
table(new_data$journal)
##
## JWM WSB
## 47 52
There were two reviewers for each reviewed study:
table(new_data$Study.ID..e.g...wsb002.or.jwm040.[new_data$Was.this.paper.reviewed..=="True"])
##
## jwm004 jwm010 jwm019 jwm022 jwm024 jwm027 jwm028 wsb004 wsb006 wsb008
## 2 2 2 2 2 2 2 2 2 2
## wsb010 wsb013 wsb014 wsb015 wsb018 wsb023 wsb028 wsb035 wsb038
## 2 2 2 2 2 2 2 2 2
So, we need to average the scores to the questions:
Subset data to reviewed studies only and check for missing data, where there should be data:
reviewed_data <- new_data[new_data$Was.this.paper.reviewed..=="True",]
summary(reviewed_data$Were.the.study.s.figures.reproduced..)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 1.750 4.000 3.361 5.000 5.000 2
summary(reviewed_data$Were.the.numbers.in.the.study.s.tables.and.or.results.text.quantitatively.reproduced..)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 2.000 4.000 3.297 4.000 5.000 1
summary(reviewed_data$Were.the.study.s.conclusions.reproduced..)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 3.000 4.000 3.703 5.000 5.000 1
For one of these studies with NAs, there were no figures, so I will replace with a “99”
reviewed_data$Were.the.study.s.figures.reproduced..[
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb018"] <- 99
For another of these studies, the study was completely unreproducible, so the reviewer erroneously didn't answer these questions. These should have been “1s”
reviewed_data$Were.the.study.s.figures.reproduced..[
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb008"] <- 1
reviewed_data$Were.the.numbers.in.the.study.s.tables.and.or.results.text.quantitatively.reproduced..[
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb008"] <- 1
reviewed_data$Were.the.study.s.conclusions.reproduced..[
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb008"] <- 1
Summarize information by reviewed study with a for-loop
study_names <- unique(reviewed_data$Study.ID..e.g...wsb002.or.jwm040.)
for(ss in 1:length(study_names)){
subsetdata <- reviewed_data[reviewed_data$Study.ID..e.g...wsb002.or.jwm040.==study_names[ss],]
# Check for disagreements amongst answers
if(length(unique(subsetdata[,"Data.readily.available."]))>=2){
print(paste(study_names[ss], "error: data readily available"))
}
if(length(unique(subsetdata[,"Was.the.data.pre.processed.or.shared.in.original.raw.format." ]))>=2){
print(paste(study_names[ss], "error: was data pre processed"))
}
if(length(unique(subsetdata[,"Code.available" ]))>=2){
print(paste(study_names[ss], "error: code available"))
}
if(length(unique(subsetdata[,"Analysis.was.entirely.code.based" ]))>=2){
print(paste(study_names[ss], "error: was analysis code based"))
}
if(length(unique(subsetdata[,"Can.code.be.run.as.is.." ]))>=2){
print(paste(study_names[ss], "error: Can.code.be.run.as.is.."))
}
if(length(unique(subsetdata[,"Open.source.file.formats.used." ]))>=2){
print(paste(study_names[ss], "error: open source formats"))
}
}
## [1] "wsb028 error: data readily available"
## [1] "jwm019 error: open source formats"
## [1] "wsb013 error: code available"
## [1] "wsb013 error: open source formats"
## [1] "wsb035 error: data readily available"
## [1] "wsb035 error: was analysis code based"
## [1] "wsb004 error: was data pre processed"
## [1] "jwm010 error: was data pre processed"
## [1] "jwm010 error: was analysis code based"
## [1] "jwm010 error: Can.code.be.run.as.is.."
## [1] "wsb018 error: data readily available"
## [1] "wsb018 error: open source formats"
## [1] "wsb006 error: data readily available"
## [1] "wsb006 error: was data pre processed"
## [1] "wsb006 error: was analysis code based"
## [1] "wsb006 error: Can.code.be.run.as.is.."
## [1] "wsb006 error: open source formats"
## [1] "wsb023 error: was analysis code based"
## [1] "wsb010 error: was data pre processed"
## [1] "wsb010 error: Can.code.be.run.as.is.."
## [1] "wsb010 error: open source formats"
## [1] "wsb014 error: data readily available"
## [1] "wsb014 error: code available"
## [1] "wsb014 error: open source formats"
## [1] "jwm022 error: data readily available"
## [1] "jwm022 error: was data pre processed"
## [1] "jwm022 error: code available"
## [1] "jwm022 error: Can.code.be.run.as.is.."
## [1] "wsb008 error: data readily available"
## [1] "wsb008 error: code available"
## [1] "wsb008 error: Can.code.be.run.as.is.."
## [1] "jwm024 error: was analysis code based"
## [1] "jwm024 error: Can.code.be.run.as.is.."
## [1] "jwm028 error: was data pre processed"
## [1] "jwm028 error: was analysis code based"
## [1] "jwm028 error: Can.code.be.run.as.is.."
## [1] "jwm004 error: open source formats"
## [1] "wsb038 error: Can.code.be.run.as.is.."
## [1] "jwm027 error: open source formats"
Data was sent by author so “was data readily available” should be “False”
True for: wsb028, wsb018, wsb006, wsb014, wsb008
Data was available in paper, so “was data readily available” should be “True”
True for: wsb035, jwm022
reviewed_data$Data.readily.available. <- ifelse(
test = reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb028" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb018" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb006" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb014" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb008",
yes = "False",
no = ifelse(
test = reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb035" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm022",
yes = "True",
no = reviewed_data$Data.readily.available.
)
)
For jwm022 and wsb008, code actually was available
For wsb013 and wsb014, analysis was not code-based so should be “Not applicable..”
reviewed_data$Code.available <- ifelse(
test = reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm022" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb008",
yes = "True",
no = ifelse(
test = reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb013" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb014",
yes = "Not applicable (e.g., not analyzed with code-based software)",
no = reviewed_data$Code.available
))
Actually true for wsb035, jwm010, wsb006, wsb023, jwm024 and jwm028
reviewed_data$Analysis.was.entirely.code.based <- ifelse(
test = reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb035" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm010" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb006" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb023" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm024" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm028",
yes = "True",
no = reviewed_data$Analysis.was.entirely.code.based)
True for wsb004 and wsb010, but raw data for jwm010, wsb006, jwm022
reviewed_data$Was.the.data.pre.processed.or.shared.in.original.raw.format. <- ifelse(
test = reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb004" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb010" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm028",
yes = "Pre-processed",
no = ifelse(
test = reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm010" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "wsb006" |
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. == "jwm022",
yes = "Raw format",
no = reviewed_data$Was.the.data.pre.processed.or.shared.in.original.raw.format.
))
Make sure this is “NA” for studies without code provided
reviewed_data$Can.code.be.run.as.is..[reviewed_data$Code.available=="False"] <- NA
For jwm022, the code could be run as-is, but this was mistakenly not completed on survey:
reviewed_data$Can.code.be.run.as.is..[reviewed_data$Study.ID..e.g...wsb002.or.jwm040.=="jwm022"] <- 5
The rest are just from where there are slight ranking changes between both reviewers, so they'll be averaged out in the next step
Studies jwm019, wsb006, wsb010, wsb014, jwm027 used open source formats like csv, R, unmarked, etc.
Studies wsb013, wsb018, jwm004 used proprietary formats like JMP, ArcGIS, and Excel
open <- c("jwm019", "wsb006", "wsb010", "wsb014", "jwm027")
proprietary <- c("wsb013", "wsb018", "jwm004")
Update discrepancies
reviewed_data$Open.source.file.formats.used.[
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. %in% open] <-
"True"
reviewed_data$Open.source.file.formats.used.[
reviewed_data$Study.ID..e.g...wsb002.or.jwm040. %in% proprietary] <-
"False"
New dataset for averaged data
averages <-
as.data.frame(matrix(NA, ncol = 6, nrow = length(study_names)))
colnames(averages) <-
c("studyID", "graphsReproduced", "numbersReproduced",
"conclusionsReproduced", "codeRunsAsIs", "journal")
for(ss in 1:length(study_names)){
subsetdata <-
reviewed_data[reviewed_data$Study.ID..e.g...wsb002.or.jwm040.==study_names[ss],]
# Check for disagreements amongst answers
if(length(unique(subsetdata[,"Data.readily.available."]))>=2){
print(paste(study_names[ss], "error: data readily available"))
}
if(length(unique(subsetdata[
,"Was.the.data.pre.processed.or.shared.in.original.raw.format." ]))>=2){
print(paste(study_names[ss], "error: was data pre processed"))
}
if(length(unique(subsetdata[,"Code.available" ]))>=2){
print(paste(study_names[ss], "error: code available"))
}
if(length(unique(subsetdata[,"Analysis.was.entirely.code.based" ]))>=2){
print(paste(study_names[ss], "error: was analysis code based"))
}
# Average over numerical responses
averages$studyID[ss] <- study_names[ss]
averages$graphsReproduced[ss] <-
ifelse(study_names[ss] == "wsb018",
yes = NA,
no = mean(subsetdata$Were.the.study.s.figures.reproduced.., na.rm = T))
averages$numbersReproduced[ss] <-
mean(subsetdata$Were.the.numbers.in.the.study.s.tables.and.or.results.text.quantitatively.reproduced..)
averages$conclusionsReproduced[ss] <-
mean(subsetdata$Were.the.study.s.conclusions.reproduced..)
averages$codeRunsAsIs[ss] <- mean(subsetdata$Can.code.be.run.as.is..)
averages$journal[ss] <- subsetdata$journal[1]
averages$dataAvailable[ss] <- subsetdata$Data.readily.available.[1]
averages$preProcessed[ss] <-
subsetdata$Was.the.data.pre.processed.or.shared.in.original.raw.format.[1]
averages$codeBased[ss] <- subsetdata$Analysis.was.entirely.code.based[1]
averages$codeAvailable[ss] <- subsetdata$Code.available[1]
averages$openSource[ss] <- subsetdata$Open.source.file.formats.used.[1]
}
Do results look right?
summary(averages)
## studyID graphsReproduced numbersReproduced
## Length:19 Min. :1.000 Min. :1.000
## Class :character 1st Qu.:1.750 1st Qu.:2.000
## Mode :character Median :3.500 Median :4.000
## Mean :3.278 Mean :3.237
## 3rd Qu.:4.875 3rd Qu.:4.000
## Max. :5.000 Max. :5.000
## NA's :1
## conclusionsReproduced codeRunsAsIs journal
## Min. :1.000 Min. :2.000 Length:19
## 1st Qu.:2.250 1st Qu.:3.000 Class :character
## Median :4.500 Median :3.750 Mode :character
## Mean :3.632 Mean :3.650
## 3rd Qu.:5.000 3rd Qu.:4.375
## Max. :5.000 Max. :5.000
## NA's :9
## dataAvailable preProcessed codeBased
## Length:19 Length:19 Length:19
## Class :character Class :character Class :character
## Mode :character Mode :character Mode :character
##
##
##
##
## codeAvailable openSource
## Length:19 Length:19
## Class :character Class :character
## Mode :character Mode :character
##
##
##
##
If it was not code based, then codeAvailable should equal NA
averages$codeAvailable[averages$codeBased=="False"] <- NA
For wsb035, there are a few categories that do not apply, because it was a primarily simulated dataset, so they'll be converted to NA
averages$openSource[averages$studyID=="wsb035"] <- NA
averages$preProcessed[averages$studyID=="wsb035"] <- NA
averages$dataAvailable[averages$studyID=="wsb035"] <- NA
averages$codeBased[averages$studyID=="wsb035"] <- NA
save(averages, file = "data/processed_data/averages_of_reviewed_studies.Rdata")
save(reviewed_data, file = "data/processed_data/reviewed_studies_data.Rdata")
save(new_data, file = "data/processed_data/all_studies_data.Rdata")
devtools::session_info()
## - Session info ----------------------------------------------------------
## setting value
## version R version 3.4.3 (2017-11-30)
## os Windows >= 8 x64
## system x86_64, mingw32
## ui RStudio
## language (EN)
## collate English_United States.1252
## ctype English_United States.1252
## tz America/Chicago
## date 2019-06-03
##
## - Packages --------------------------------------------------------------
## package * version date lib source
## assertthat 0.2.0 2017-04-11 [1] CRAN (R 3.4.4)
## backports 1.1.2 2017-12-13 [1] CRAN (R 3.4.4)
## bindr 0.1.1 2018-03-13 [1] CRAN (R 3.4.4)
## bindrcpp 0.2.2 2018-03-29 [1] CRAN (R 3.4.4)
## callr 3.1.0 2018-12-10 [1] CRAN (R 3.4.4)
## cli 1.0.1 2018-09-25 [1] CRAN (R 3.4.4)
## colorspace 1.3-2 2016-12-14 [1] CRAN (R 3.4.4)
## crayon 1.3.4 2017-09-16 [1] CRAN (R 3.4.4)
## desc 1.2.0 2018-05-01 [1] CRAN (R 3.4.4)
## devtools * 2.0.1 2018-10-26 [1] CRAN (R 3.4.4)
## digest 0.6.18 2018-10-10 [1] CRAN (R 3.4.4)
## dplyr 0.7.8 2018-11-10 [1] CRAN (R 3.4.4)
## evaluate 0.12 2018-10-09 [1] CRAN (R 3.4.4)
## ezknitr * 0.6 2016-09-16 [1] CRAN (R 3.4.4)
## fs 1.2.6 2018-08-23 [1] CRAN (R 3.4.4)
## ggplot2 * 3.1.0 2018-10-25 [1] CRAN (R 3.4.4)
## glue 1.3.0 2018-07-17 [1] CRAN (R 3.4.4)
## gtable 0.2.0 2016-02-26 [1] CRAN (R 3.4.4)
## highr 0.7 2018-06-09 [1] CRAN (R 3.4.4)
## knitr * 1.21 2018-12-10 [1] CRAN (R 3.4.4)
## labeling 0.3 2014-08-23 [1] CRAN (R 3.4.1)
## lazyeval 0.2.1 2017-10-29 [1] CRAN (R 3.4.4)
## magrittr 1.5 2014-11-22 [1] CRAN (R 3.4.3)
## markdown 0.9 2018-12-07 [1] CRAN (R 3.4.4)
## memoise 1.1.0 2017-04-21 [1] CRAN (R 3.4.4)
## mime 0.6 2018-10-05 [1] CRAN (R 3.4.4)
## munsell 0.5.0 2018-06-12 [1] CRAN (R 3.4.4)
## pillar 1.3.0 2018-07-14 [1] CRAN (R 3.4.4)
## pkgbuild 1.0.2 2018-10-16 [1] CRAN (R 3.4.4)
## pkgconfig 2.0.2 2018-08-16 [1] CRAN (R 3.4.4)
## pkgload 1.0.2 2018-10-29 [1] CRAN (R 3.4.4)
## plyr 1.8.4 2016-06-08 [1] CRAN (R 3.4.4)
## prettyunits 1.0.2 2015-07-13 [1] CRAN (R 3.4.4)
## processx 3.2.1 2018-12-05 [1] CRAN (R 3.4.4)
## ps 1.2.1 2018-11-06 [1] CRAN (R 3.4.4)
## purrr 0.2.5 2018-05-29 [1] CRAN (R 3.4.4)
## R.methodsS3 1.7.1 2016-02-16 [1] CRAN (R 3.4.1)
## R.oo 1.22.0 2018-04-22 [1] CRAN (R 3.4.4)
## R.utils 2.7.0 2018-08-27 [1] CRAN (R 3.4.4)
## R6 2.3.0 2018-10-04 [1] CRAN (R 3.4.4)
## Rcpp 1.0.0 2018-11-07 [1] CRAN (R 3.4.4)
## remotes 2.0.2 2018-10-30 [1] CRAN (R 3.4.4)
## rlang 0.3.0.1 2018-10-25 [1] CRAN (R 3.4.4)
## rprojroot 1.3-2 2018-01-03 [1] CRAN (R 3.4.4)
## scales 1.0.0 2018-08-09 [1] CRAN (R 3.4.4)
## sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 3.4.4)
## stringi 1.2.4 2018-07-20 [1] CRAN (R 3.4.4)
## stringr 1.3.1 2018-05-10 [1] CRAN (R 3.4.4)
## testthat 2.0.1 2018-10-13 [1] CRAN (R 3.4.4)
## tibble 1.4.2 2018-01-22 [1] CRAN (R 3.4.4)
## tidyselect 0.2.5 2018-10-11 [1] CRAN (R 3.4.4)
## usethis * 1.4.0 2018-08-14 [1] CRAN (R 3.4.4)
## withr 2.1.2 2018-03-15 [1] CRAN (R 3.4.4)
## xfun 0.4 2018-10-23 [1] CRAN (R 3.4.4)
## yaml 2.2.0 2018-07-25 [1] CRAN (R 3.4.4)
##
## [1] C:/Users/aarchmil/Documents/R/win-library/3.4
## [2] C:/Program Files/R/R-3.4.3/library
spun with: ezknitr::ezspin(file = “programs/01_data_processing.R”, keep_md = FALSE, out_dir = “html_reports”, fig_dir = “figures”)