Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
4 years ago

Los scripts de R no funcionan

Hola.

Este es un script R que obtiene datos de un código abierto e intenta aplicar ajustes estacionales a la serie temporal con ARIMA usando x12 en R

library(dplyr)
require(tidyr)
require(x12)


get_data <- function() {
    url <- "https://px.hagstofa.is:443/pxis/sq/61359243-62a0-4f2b-99b6-aa3c31267fab"
  markadsverd_nsa <- read.csv(url,
                         sep = "\t")
  colnames(markadsverd_nsa) <- c("Period", "Visitala", "Value")
  
   markadsverd_nsa$Value[markadsverd_nsa$Value == ".."] <- NA
  markadsverd_nsa$Value <- as.numeric(as.character(markadsverd_nsa$Value))
  
  # Rename the "Visitala"
  markadsverd_nsa$Visitala <- as.character(markadsverd_nsa$Visitala)
  markadsverd_nsa$Visitala[markadsverd_nsa$Visitala == "Höfuðborgarsvæði - Fjölbýli"] <- "Hbsv_Fjolbyli"
  markadsverd_nsa$Visitala[markadsverd_nsa$Visitala == "Höfuðborgarsvæði - Einbýli"] <- "Hbsv_Einbyli"
  markadsverd_nsa$Visitala[markadsverd_nsa$Visitala == "Utan höfuðborgarsvæðis - Alls"] <- "Landsb_Alls"
  markadsverd_nsa$Visitala[markadsverd_nsa$Visitala == "Landið - Alls"] <- "Landid_Alls"
  
  # Convert to wide format
  markadsverd_nsa <- spread(data = markadsverd_nsa, value = "Value", Visitala)
  
  return(markadsverd_nsa)
}

### Performing seasonal adjustment  ##
# We begin by downloading the data
markadsverd_nsa <- get_data()

# The x12 function only wants to work with one time series at a time. 
# Let’s focus on foreign passengers. The serie needs to be defined as a ts time series object.
mverd_fjolbyli <- ts(markadsverd_nsa$Hbsv_Fjolbyli, frequency = 12, start = c(2000,3))
mverd_einbyli <- ts(markadsverd_nsa$Hbsv_Einbyli, frequency = 12, start = c(2000,3))
mverd_landsbyggd <- ts(markadsverd_nsa$Landsb_Alls, frequency = 12, start = c(2000,3))
mverd_landid <- ts(markadsverd_nsa$Landid_Alls, frequency = 12, start = c(2000,3))


# The seasonal adjustment is performed with the function x12 and returns an S4 object of the class x12Output.

mverd_fjolbyli_sa <- x12(mverd_fjolbyli) 
mverd_fjolbyli_sa <-mverd_fjolbyli_sa@d11

mverd_einbyli_sa <- x12(mverd_einbyli) 
mverd_einbyli_sa <- mverd_einbyli_sa@d11

mverd_landsbyggd_sa <- x12(mverd_landsbyggd) 
mverd_landsbyggd_sa <- mverd_landsbyggd_sa@d11

mverd_landid_sa <- x12(mverd_landid) 
mverd_landid_sa <- mverd_landid_sa@d11

markadsverd_sa <- cbind.data.frame(mverd_einbyli_sa, mverd_fjolbyli_sa, mverd_landid_sa, mverd_landsbyggd_sa)
markadsverd <-cbind(markadsverd_nsa,markadsverd_sa)
# For a list of more slots see the documentation on the x12Output class in the manual for the x12 package (see here).

# Another interesting thing to observe is the seasonal factors. Those can be plotted directly with the convenience function plotSeasFac. The plot for our data looks like this.

#plotSeasFac(mverd_fjolbyli_sa)

Estoy ejecutando este script en Power BI Desktop. Simplemente no funciona en mi computadora, pero funciona en otra con una versión anterior de R instalada.

Yggdrasill_0-1631977408489.png

Este es el error que recibo. Bueno, según los especialistas de R esto es solo una advertencia y no debe detener el cálculo, pero lo hace en Power BI Desktop.

Lo que he intentado hasta ahora es

  • Desinstalación completa de R, Rstudio y Rtools y vuelva a instalar con todas las bibliotecas
  • Se ha cambiado el almacenamiento de la biblioteca Temp para R en PBI Desktop
  • Cambiar las rutas de la biblioteca según varios orígenes sobre este problema con .libPath()

¿Cómo puedo ejecutar R-scripts ignorando con éxito las advertencias?

4 Replies

  • Hay @Yggdrasill ,

    El problema podría ocurrir en la url:

    url <- "https://px.hagstofa.is:443/pxis/sq/61359243-62a0-4f2b-99b6-aa3c31267fab"

    Cuando leo este archivo en R directamente, devuelve el error:

    vyingjl_0-1632272488420.png

    Si descargo este archivo y lo almaceno en el local para reemplazar la ruta, funciona:

    vyingjl_2-1632272569113.png

    Por lo tanto, puede intentar almacenar el archivo url en local y verificarlo.

    Además, aquí hay un subproceso similar que proporciona otra solución alternativa que también puede consultar:

    La conexión remota no puede obtener ningún dato de Internet

    Saludos
    Equipo de apoyo a la comunidad _ Yingjie Li
    Si esta publicación ayuda,entonces considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      Hola y gracias por la respuesta. No creo que ese sea el problema aquí, ya que puedo leer la URL a través de Rstudio

      Por ejemplo, puedo obtener datos con éxito con este comando:

      data <- read.csv('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data')

      Lo que debe probar en lugar de dejar que R obtenga los datos, deje que Power Query los obtenga en su lugar y luego intente ejemplificar el script R, así:


      let
      
      //POWER QUERY FETCHES DATA AND TRANSFORMS PROPERLY 
        Source = Csv.Document(
          Web.Contents("https://px.hagstofa.is:443/pxis/sq/61359243-62a0-4f2b-99b6-aa3c31267fab"),
          [Delimiter = "	", Columns = 3, Encoding = 1252, QuoteStyle = QuoteStyle.None]
        ),
        #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars = true]),
        #"Changed Type" = Table.TransformColumnTypes(
          #"Promoted Headers",
          {{"Mánuður", type text}, {"Vísitala", type text}, {"Vísitala neysluverðs", type number}}
        ),
        #"Pivoted Column" = Table.Pivot(
          #"Changed Type",
          List.Distinct(#"Changed Type"[Vísitala]),
          "Vísitala",
          "Vísitala neysluverðs",
          List.Sum
        ),
        #"Renamed Columns" = Table.RenameColumns(
          #"Pivoted Column",
          {
            {"Höfuðborgarsvæði - Einbýli", "Hbsv_Einbyli"},
            {"Höfuðborgarsvæði - Fjölbýli", "Hbsv_Fjolbyli"},
            {"Landið - Alls", "Landid_Alls"},
            {"Utan höfuðborgarsvæðis - Alls", "Landsb_Alls"}
          }
        ),
      
      //EXECUTE R SCRIPT USING TIDYR and X12 FUNCTIONS
        #"Execute R" = R.Execute(
          "library(dplyr)
      #(lf)require(tidyr)
      #(lf)require(x12)
      #(lf)#(lf)#(lf)##
      # Performing seasonal adjustment  ###(lf)
      # We begin by downloading the data#(lf)
      // THIS COMMAND READS PQ DATA TO R !
      markadsverd_nsa <- dataset#(lf)#(lf)
      
      # The x12 function only wants to work with one time series at a time. #(lf)
      # Let’s focus on foreign passengers. The serie needs to be defined as a ts time series object.#
      (lf)mverd_fjolbyli <- ts(markadsverd_nsa$Hbsv_Fjolbyli, frequency = 12, start = c(2000,3))#(lf)mverd_einbyli <- ts(markadsverd_nsa$Hbsv_Einbyli, frequency = 12, start = c(2000,3))#(lf)mverd_landsbyggd <- ts(markadsverd_nsa$Landsb_Alls, frequency = 12, start = c(2000,3))#(lf)mverd_landid <- ts(markadsverd_nsa$Landid_Alls, frequency = 12, start = c(2000,3))#(lf)#
      
      (lf)#(lf)# The seasonal adjustment is performed with the function x12 and returns an S4 object of the class x12Output.#(lf)#(lf)
      mverd_fjolbyli_sa <- x12(mverd_fjolbyli) #(lf)
      mverd_fjolbyli_sa <-mverd_fjolbyli_sa@d11#(lf)#(lf)
      mverd_einbyli_sa <- x12(mverd_einbyli) #(lf)
      mverd_einbyli_sa <- mverd_einbyli_sa@d11#(lf)#(lf)
      mverd_landsbyggd_sa <- x12(mverd_landsbyggd) #(lf)
      mverd_landsbyggd_sa <- mverd_landsbyggd_sa@d11#(lf)#(lf)
      mverd_landid_sa <- x12(mverd_landid) #(lf)
      mverd_landid_sa <- mverd_landid_sa@d11#(lf)#(lf)
      markadsverd_sa <- cbind.data.frame(mverd_einbyli_sa, mverd_fjolbyli_sa, mverd_landid_sa, mverd_landsbyggd_sa)#(lf)
      markadsverd <-cbind(markadsverd_nsa,markadsverd_sa)#(lf)
      # For a list of more slots see the documentation on the x12Output class in the manual for the x12 package (see here).#(lf)#(lf)
      # Another interesting thing to observe is the seasonal factors. Those can be plotted directly with the convenience function plotSeasFac. The plot for our data looks like this.#(lf)#(lf)#plotSeasFac(mverd_fjolbyli_sa)"
        ),
        markadsverd1 = Source{[Name = "markadsverd"]}[Value],
        #"Added Custom Column" = Table.AddColumn(
          markadsverd1,
          "Date",
          each Text.Combine({Text.Middle([Period], 5), ".", Text.Start([Period], 4)}),
          type text
        ),
        #"Changed Type2" = Table.TransformColumnTypes(#"Added Custom Column", {{"Date", type date}}),
        #"Reordered Columns" = Table.ReorderColumns(
          #"Changed Type2",
          {
            "Date",
            "Period",
            "Hbsv_Einbyli",
            "Hbsv_Fjolbyli",
            "Landid_Alls",
            "Landsb_Alls",
            "mverd_einbyli_sa",
            "mverd_fjolbyli_sa",
            "mverd_landid_sa",
            "mverd_landsbyggd_sa"
          }
        )
      in
        #"Reordered Columns"

      Esto debería hacer exactamente lo mismo que el script que publiqué anteriormente, pero en su lugar uso PQ para obtener los datos y luego intentar ejemplificar R-script con.


      El comando R

      markadsverd_nsa <- dataset

      obtendrá los datos de PQ

      ¡Hago que esto funcione hasta que el script intente ejecutar los paquetes desde R! y no sé por qué 😞