Saltar al contenido principal
LibreTexts Español

9.4: Bueno, Malo, y no muy malo

  • Page ID
    150103
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Esta última sección es aún más práctica. Hablemos de varios guiones R.

    Bueno

    Este es un ejemplo de guión R (casi) ideal:

    Código\(\PageIndex{1}\) (R):

    ### PREPARATIONS
    library(effsize)
    Normal <- function(x) { ifelse(shapiro.test(x)$p.value > 0.05, "NORMAL", "NON-NORMAL")}
    cc <-read.table("http://ashipunov.info/shipunov/open/ceratophyllum.txt",h=TRUE)
    ### DATA PROCESING
    ## check data:
    str(cc)
    head(cc)
    sapply(cc[, 4:5], Normal) # both non-normal
    ## plot it first:
    pdf("plot1.pdf")
    boxplot(cc[, 4:5], ylab="Position of stem, mm on grid")
    dev.off()
    ## we only need effect size:
    cliff.delta(cc$PLANT1, cc$PLANT2)

    Sus principales características:

    • Partes claramente separadas: carga de material externo (líneas 1—12) y procesamiento de los datos en sí (líneas 13—26)
    • primero paquete (s) (línea 3), luego funciones personalizadas (línea 5—7), luego datos (línea 9)
    • los datos se verifican (líneas 16—18) con str () y luego se verifica la normalidad
    • después de las comprobaciones, los datos se trazaron primero (líneas 21—23), luego se analizaron (línea 26)
    • estilo aceptable
    • cada paso es comentado

    Para ver cómo funciona, cambie el directorio de trabajo a donde se encuentra el script, luego cargue este script en R con:

    Código\(\PageIndex{2}\) (R):

    source("good.r", echo=TRUE)

    Otra variante es no interactiva y por lo tanto más rápida y limpia. Usa el script Rresults (funciona en macOS y Linux) como:

    Código\(\PageIndex{3}\) (R):

    Rresults good.r

    Script imprimirá tanto entrada como salida en el terminal, además también lo guardará como un archivo de texto y guardará parcelas en un archivo PDF con nombre de script. Dado que este libro es el guión R, encontrará ejemplos de la salida de Rresults en el directorio de libros en línea\(^{[1]}\).

    Malo

    Ahora considere el siguiente guión:

    Código\(\PageIndex{4}\) (R):

    wiltingdata<-read.table("http://ashipunov.info/shipunov/open/wilting.txt", h=TRUE)
    url.show("http://ashipunov.info/shipunov/open/wilting_c.txt")
    sapply(wiltingdata, Normality)
    willowsdata<-wiltingdata[grep("Salix",wiltingdata$SPECIES),]
    Rro.test(willows[,1],willows[,2])
    summary(K(willows[,1],willows[,2]))
    source("http://ashipunov.info/r/asmisc.r")
    plot(wiltingadta)

    Es realmente malo, simplemente no funciona. Los problemas comienzan en la primera línea, y tanto las formas interactivas (con source ()) como no interactivas (con Rresults) lo mostrarán así:

    Código\(\PageIndex{5}\) (R):

    wiltingdata<- read.table("http://ashipunov.info/shipunov/open/wilting.txt",h=TRUE)

    Algo está realmente mal y necesitarás encontrarlo y corregirlo (depurarlo). Y como el código no fue comentado, hay que adivinar qué autor (es) realmente quería (es).

    Otras características negativas:

    • sin piezas, sin orden adecuado de carga, comprobación y trazado
    • interactive url.show () bloqueará aplicaciones no interactivas y, por lo tanto, es potencialmente dañino (aunque no es un error)
    • mal estilo: en particular, no hay espacios alrededor de las asignaciones y sin espacios después de comas
    • nombres de objetos muy largos (difíciles de escribir)

    El proceso de depuración consistirá en múltiples intentos hasta que hagamos el script de trabajo (preferiblemente de la manera sensata), “no-demasiado malo”. Esto podría ser embellecido más tarde, lo más importante es que funcione.

    Hay muchas formas de depurar. Por ejemplo, puedes abrir (1) R en el terminal, (2) editor de texto\(^{[2]}\) con tu script y probablemente también algún gestor de archivos avanzado (3). Ejecute primero el script para ver el problema. Después copiar-pegar de R al editor y volver de nuevo.

    Pasemos primero al problema de la primera línea. El mensaje es críptico, pero probablemente esto es algún conflicto entre read.table () y los datos reales. Por lo tanto, es necesario buscar datos y si lo hace, encontrará que los datos contienen tanto espacios como tabuladores. Es por ello que R se confundió. Deberías indicarle que use pestañas:

    Código\(\PageIndex{6}\) (R):

    read.table("http://ashipunov.info/shipunov/open/wilting.txt", h=TRUE, sep="	")

    Primera línea empieza a funcionar. De esta manera, paso a paso, llegarás a la siguiente etapa.

    No tan mal

    Esto es resultado de la depuración. Todavía no está completamente embellecido, no hay capítulos y comentarios. Sin embargo, funciona y probablemente de la manera implícita por los autores.

    Código\(\PageIndex{7}\) (R):

    wilt <- read.table("http://ashipunov.info/shipunov/open/wilting.txt",h=TRUE, sep="	")
    ## url.show("http://ashipunov.info/shipunov/open/wilting_c.txt")
    source("http://ashipunov.info/r/asmisc.r")
    str(wilt)
    Normality(wilt[, 2])
    willowsdata <- wilt[grep("Salix", wilt$SPECIES), ]
    willowsdata$SPECIES <- droplevels(willowsdata$SPECIES)
    willows <- split(willowsdata$TIME, willowsdata$SPECIES)
    pdf("willows.pdf")
    boxplot(willows, ylab="Wilting time, minutes")
    dev.off()
    Rro.test(willows[[1]], willows[[2]])
    summary(K(willows[[1]], willows[[2]]))

    Lo que se cambió

    • comandos personalizados movidos hasta la línea 3 (no al lugar adecuado, mejor sería la línea 1, pero esta posición garantrees trabajo)
    • url.show () comentó
    • comprobaciones añadidas (líneas 5—6)
    • nombres acortados un poco y estilo mejorado (no muy importante pero útil)
    • trazar ahora trazados en archivo, no solo en el dispositivo de pantalla
    • los sauces objeto aparecieron de la nada, por lo tanto tuvimos que adivinar qué es, por qué se usó, y luego de alguna manera recrearlo (líneas 8—9)

    pero no es lo mismo que en el script inicial. ¿Qué es diferente? ¿Es posible hacerlas igual?

    Referencias

    1. Por cierto, hay un truco de vida para el lector perezoso: todas las parcelas que necesitas hacer tú mismo están realmente presentes en el archivo PDF de salida.

    2. Entre los editores de texto, Geany es uno de los más universales, rápidos, gratuitos y funciona en la mayoría de los sistemas de operación.


    This page titled 9.4: Bueno, Malo, y no muy malo is shared under a Public Domain license and was authored, remixed, and/or curated by Alexey Shipunov via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.