file_1<-function(x)
{
x<-data.frame(x)
for(i in 1:ncol(x))
{
if(class(x[ , i])=="character"){
x<-factor(x[, i])
}
}
par(mfrow=c(ceiling(ncol(x)/2),2))
for(i in 1:ncol(x)){
if(class(x[,i])=="factor")
plot(x[, i], xlab=paste(colnames(x[i])))
}
else if(class(x[ ,i]=="numeric") {
hist(x[ , i] , main=NULL, xlab=paste(colnames(x[, i])))
}
}
}
x is a file, the function data.frames and factors the file and makes plots and histograms
CodePudding user response:
You have braces and parens out of place. Namely,
for(i in 1:ncol(x)){
if(class(x[,i])=="factor")
plot(x[, i], xlab=paste(colnames(x[i])))
}
else if(class(x[ ,i]=="numeric") {
hist(x[ , i] , main=NULL, xlab=paste(colnames(x[, i])))
}
The inner problem is that if(class(x[ ,i]=="numeric") should instead be if(class(x[ ,i])=="numeric").
The outer problem is that with your {...} braces, you are attempting for (...) { ... } else { ... }. I believe your else is meant to be inside the for loop, after the if.
Try this as a literal fix to the parsing errors.
file_1 <- function(x) {
x <- data.frame(x)
for (i in 1:ncol(x)) {
if (class(x[ , i]) == "character"){
x <- factor(x[, i])
}
}
par(mfrow = c(ceiling(ncol(x)/2), 2))
for (i in 1:ncol(x)){
if (class(x[,i]) == "factor") {
plot(x[, i], xlab = paste(colnames(x[i])))
} else if (class(x[ ,i]) == "numeric") {
hist(x[ , i] , main = NULL, xlab = paste(colnames(x[, i])))
}
}
}
Perhaps accept this altered version:
file_1 <- function(x) {
ischr <- sapply(x, is.character)
x[ischr] <- lapply(x[ischr], factor)
par(mfrow = c(ceiling(ncol(x)/2), 2))
for (i in seq_along(x)) {
if (is.factor(x[,i])) {
plot(x[,i], xlab = colnames(x)[i])
} else {
hist(x[,i], main = NULL, xlab = colnames(x)[i])
}
}
}
