Nothing
#Various useful utility functions
# list the files in a directory holding a particular file, or a particular directory
"filesList" <- function(f=NULL) {
if(is.null(f)) { f <- file.choose()}
if(dir.exists(f)) {dir <- f } else {dir <- dirname(f)} #find a file in the directory you want
files.list <- list.files(dir)
message("\nFiles in the directory", dir, "\n") #although I prefer cat, CRAN seems to prefer message
return(files.list)
}
"filesInfo" <- function(f=NULL,max=NULL) {
if(is.null(f)) { f <- file.choose()}
if(dir.exists(f)) {dir <- f } else {dir <- dirname(f)}
files.list <- list.files(dir)
if(is.null(max)) max <- length(files.list)
info <- list(max)
for(i in 1:max) {
info[[i]] <- file.info(file.path(dir,files.list[i]))}
info.df <- info[[1]]
for (i in 2:max) {
info.df <- rbind(info.df,info[[i]])}
info.df <-cbind(file=1:max,info.df)
return(info.df)
}
"fileScan" <- function(f=NULL,nlines=3,max=NULL,from=1,filter=NULL) {
cat("\n Just the content of files will be shown (not directories)\n")
if(is.null(f)) {f <- file.choose()} #find a file in the directory you want
dir <- dirname(f) #the directory where the file was found
files.list <- list.files(dir)
dir.list <- list.dirs(dir,full.names=FALSE)
files.list <- files.list[!files.list %in% dir.list] #get rid of directories
if(!is.null(filter)) {select <- grep(filter,files.list,ignore.case=TRUE) #these are the ones that match filter
files.list <- files.list[select]}
n.files <- length(files.list)
if(!is.null(max)) n.files <- max + from
for (i in from:n.files) {
file <- files.list[i]
path <- file.path(dir,file)
suffix <- file_ext(file)
if(suffix %in% c("xls","xlsx","doc","sav","data","dat","rds","R","r","RDS", "XPT","xpt","Rda","rda","Rdata","RData","rdata","SYD","syd","sys","jmp","sas7bdat")) {
cat("\nFile = ",i, "Name = ", file, "Was skipped") } else {
# temp <- scan(path,what="raw",nlines=nlines)
temp <- readLines(path,n=nlines)
cat("\nFile = ",i, "Name = ", file, "\n",temp,"\n")}
}
return(dir)
}
#a work around the failure of file.choose(new=TRUE) to work in Rstudio
"fileCreate" <- function(newName="new.file") {
cat("Search for a file in the directory where you want to create a new file")
fn <- file.choose()
dir <- dirname(fn)
new.path <- file.path(dir,newName)
message("\nAre you sure you want to create a new file named ",new.path,"?\n")
ok <- readline(prompt="Yes or No ")
if(any(c("Y","y") %in% ok)) {
if(!file.exists(new.path)) {
file.create(new.path)
return(new.path) } else {message('\nFile already exists, try a different name')}
}else {message("fileCreate was cancelled")}
}
#Completely rewritten 1/20/18 to follow the help pages for order more closely
#sort a data frame according to one or multiple columns
#will only work for data.frames (not matrices)
#needs to not quit if there is nothing to do
#Then rewritten again 01/02/22 to allow sorting correlation matrices as well
#Minor tweak 2/21/22 for the case of a single column
#There are actually two cases; for data.frames (select=null) and for correlations (select = column names)
dfOrder <- function(object,columns=NULL,absolute=FALSE,ascending=TRUE) {
if(is.matrix(object)) {mat<- TRUE
object <- as.data.frame(object)} else {mat<-FALSE}
if(is.null(ncol(object))| NROW(object) ==1) {return(object)} else {
if(is.null(columns)) columns <- colnames(object)
if(psych::isCorrelation(object)) {select <- columns} else {select<- NULL}
nc <- length(columns)
cn <- colnames(object)
if(is.null(select)) {
#this allows us to sort columns independently of each other
if(ascending) {temp <- rep(1,nc)} else {temp <- rep(-1,nc)}
if(is.character(columns)) { #treat character strings
temp [strtrim(columns,1)=="-"] <- -1
if(any(temp < 0 ) ) {columns <- sub("-","",columns) }
} else {temp[columns < 0] <- -1
columns <- abs(columns) }
if(is.character(columns) ) { for (i in 1:length(columns)) {columns[i] <- (which(colnames(object) == columns[i]))
}
columns <- as.numeric(columns)
}
if(absolute) { temp.object<- t(t(abs(psych::char2numeric(object[columns]))) * temp) } else {
temp.object<- t(t(psych::char2numeric(object[columns])) * temp)}
# if(absolute) {temp.object <- psych::char2numeric(object[columns])} else {
# temp.object <- psych::char2numeric(object[columns])}
temp.object <- data.frame(temp.object)
} else { #the correlation case
if(!is.numeric(select)) {if (!all(select %in% cn)) stop ('Variable names are incorrect')}
# if(absolute) object <- abs(object)
temp.ord <- apply(abs(object[,select,drop=FALSE]),1,which.max)
if(!ascending) temp.ord <- length(select)- temp.ord
if(absolute) { t.m <- apply(abs(object[,select,drop=FALSE]) ,1,max)} else {
temp.max <- apply(object[,select,drop=FALSE] ,1,max)
temp.min <- apply(object[,select,drop=FALSE],1,min)
abs.max <- apply(abs(object[,select,drop=FALSE]),1,max)
t.m <- abs.max
t.m[abs.max > temp.max] <- temp.min[abs.max > temp.max]}
temp.max <- t.m + 3*(length(select)-1+ temp.ord)
# else {temp.ord <- apply(object[,select],1,which.min)
# temp.max <- apply(object[,select],1,min)}
# temp.max <- temp.max + 3 * (length(select) + 1 +temp.ord) #this takes into account the possibility of signed values
ord <- order(temp.max,decreasing=!ascending)
if(NCOL(object) == NROW(object)) {return(object[ord,ord])} else {return(object[ord,])}
}
ord <- do.call(order,temp.object)
if(mat) object <- as.matrix(object)
if(length(ord) > 1) {
return(object[ord,]) } else {return(object)} #added length test 4/26/18
}
}
#two unpublished functions
"bullseye" <- function(x,y,n) {
for(i in 1:n) {psych::dia.ellipse(x,y,e.size=i)}
}
"dartBoard" <- function(n,sdx=.2,sdj=.3) {
plot(NA,xlim=c(0,10),ylim=c(0,10),axes=FALSE,xlab="",ylab="",main="Reliability and Validity as dart throwing")
if(n>20) {pc <- "."} else {pc <- 16}
if(missing(sdj)) sdj=sdx*1.5
#Reliable and valid
x=3
y=3
bullseye(x,y,4)
points(x+rnorm(n,0,sdx),y+rnorm(n,0,sdx),pch=pc)
text(x,y-2,"Reliable and Valid")
#reliable and invalid
x=7
y=8
bullseye(x,y,4)
points(x+rnorm(n,1,sdx),y+rnorm(n,1,sdx),pch=pc)
text(x,y-2,"Reliable and Invalid")
#unreliable and invalid
x=3
y=8
bullseye(x,y,4)
points(x+rnorm(n,1,sdj),y+rnorm(n,1,sdj),pch=pc)
text(x,y-2,"Unreliable and Invalid")
#unreliable, but valid
x=7
y=3
sdx=1
bullseye(x,y,4)
points(x+rnorm(n,0,sdj),y+rnorm(n,0,sdj),pch=pc)
text(x,y-2,"Unreliable but Valid")
}
#dartBoardl(6,.3,.5)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.