Tengo el siguiente codigo:
rm(list=ls(all=T))#limpia todo lo antes escrito library(tuneR) #libreria para manipular archivos de audio library(e1071)#libreria para sacar la skewness y kurtosis directorio<-"/home/roy/Descargas/audios" #variable donde se almacena el directorio ld <- list.dirs(directorio, recursive = FALSE)# Se abre el directorio principal #se inicialisa la variable deacuerto a lo que el usario desee fracmentar el audio tiempo_de_inicio<-50000 duracion<-tiempo_de_inicio cons<-duracion w<-1 k<-1 fi<-"" inicio<-0 Nombre<-"" Media<-"" Mediana<-"" Moda<-"" Skewness<-"" Kurtosis<-"" z<-"" xy<-"" pk<-"" ####################################### FUNCION MODA ######################################### Mode <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] } ################################ FUNCION PDF ######################################### graficas_pdf= function (parte,i,j,w){ #funcion que sirve para generar los graficos en pdf nombre<-paste(i,'/',j,"_",w,".pdf",sep = "") pdf(file =nombre) plot(parte) dev.off() } ########################################################################### for (i in ld) { # Se recoren las subcarpetas lf <- list.files(i) # se en lista lo que alla en ellas for (j in lf) { #se recorren los archivos dire<-i setwd(dire) #se fija el nuevo directorio cat('Directorio', i, 'archivo', j, '\n') pista<-readWave(j) #se lee el archivo .wave canalizq<- mono(pista, "left") #se extrae el canal izquierdo frecuencia=pista@samp.rate #se saca la frecuencia en la que esta el audio if(frecuencia==44100){ # busca en que frecuencia se encuentra el audio #frecuencia de 44100 repeticiones por segundo duracion<-tiempo_de_inicio*4 #incrementa las variables dependiendo de la frecuencia cons<-duracion submuestreo<- downsample(canalizq,frecuencia) #se extrae el canadel dependiendo de la frecuencia for(y in 1:length(submuestreo)){ #se recorre el canal extraido if(duracion<=length(submuestreo)) { #Se extraen los fracmentos de acuerdo al tamaño que el usuario dio parte<- extractWave(submuestreo,from = inicio, to =duracion,xunit =c("samples", "time")) #se extrae el espectro graficas_pdf(parte,i,j,w) #se aplica la funcion para guardar en pdf x=parte@left #se extrae la parte izquierda del espectro para sacar los datos estadisticos Media[k]<-mean(x) Mediana[k]<- median(x) Moda[k]<-Mode(x) Skewness[k]<-skewness(x) Kurtosis[k]<-kurtosis(x) ##latex Nombre[k]<-paste(j,"_",w,".pdf",sep = "") df<- data.frame( Nombre,Media, Mediana, Moda, Skewness,Kurtosis ) inicio=inicio+cons duracion=duracion+cons w=w+1 }else if(duracion>length(submuestreo)){ print("El audio es menos al fracmento que se pide") break; } k=k+1 } inicio=0 duracion<-tiempo_de_inicio w=1 } direc<-paste(directorio,"/Datos_Estadisticos.csv",sep = "") #se le pasa el directorio y se aumente el nombre del archivo write.csv(df,file=direc) #se crea el archivo que contendra los datos estadisticos }
lo que el codigo genera es:
Todo el codigo funciona a la perfección, la funcion de este programa es tomar unos audios que estan en la ruta Descargas/audios luego los procesa y extrae el canal izquierdo con el cual se generan sus espectros por medio de pdf y saca los datos estadisticos, guardandolos en un archivo .csv. la cuestion es que en la parte del codigo donde se sacan los datos estadicos —->
Media[k]<-mean(x) Mediana[k]<- median(x) Moda[k]<-Mode(x) Skewness[k]<-skewness(x) Kurtosis[k]<-kurtosis(x) ##latex Nombre[k]<-paste(j,"_",w,".pdf",sep = "") df <- data.frame( Nombre,Media, Mediana, Moda, Skewness,Kurtosis )
como hacer para que ese código poderlo convertirlo a un a función y luego solo llamar la función.