Pregunta

Tengo dificultades con:

  • Listado de los paquetes y funciones disponibles de I a PostgreSQL.
  • Instalación de un paquete (como Kendall ) para uso con PL / R
  • Llamar a una función de R dentro PostgreSQL

Listing disponibles Paquetes de I

P.1. ¿Cómo se puede averiguar lo que se han cargado los módulos de I?

SELECT * FROM r_typenames();

que muestra los tipos que están disponibles, pero ¿y comprobar si se ha cargado Kendall( X, Y )? Por ejemplo, el documentación espectáculos:

CREATE TABLE plr_modules (
  modseq int4,
  modsrc text
);

Esto parece permitir la inserción de registros para dictar que Kendall se va a cargar, pero el código siguiente no se explican, sintácticamente, la forma de garantizar que se carga:

INSERT INTO plr_modules
  VALUES (0, 'pg.test.module.load <-function(msg) {print(msg)}');

P.2. ¿Cómo sería la mirada por encima de la línea como si estuviera tratando de cargar Kendall?
P.3. ¿Es aplicable?

Instalación de los paquetes de I

Con el administrador "sináptica" paquete han sido instalados los siguientes paquetes:

r-base
r-base-core
r-base-dev
r-base-html
r-base-latex
r-cran-acepack
r-cran-boot
r-cran-car
r-cran-chron
r-cran-cluster
r-cran-codetools
r-cran-design
r-cran-foreign
r-cran-hmisc
r-cran-kernsmooth
r-cran-lattice
r-cran-matrix
r-cran-mgcv
r-cran-nlme
r-cran-quadprog
r-cran-robustbase
r-cran-rpart
r-cran-survival
r-cran-vr
r-recommended

P.4. ¿Cómo sé si Kendall está ahí?
P.5. Si no es así, ¿cómo puedo averiguar qué paquete es en?
Q.6. Si no está en un paquete adecuado para la instalación con apt-get (aptitude, synaptic, dpkg, lo que tiene), ¿cómo hago para instalarlo en Ubuntu?
P. 7. ¿Dónde están los pasos de instalación documentados?

Llamar R Funciones

Tengo el siguiente código:

EXECUTE 'SELECT '
  'regr_slope( amount, year_taken ),'
  'regr_intercept( amount, year_taken ),'
  'corr( amount, year_taken ),'
  'sum( measurements ) AS total_measurements '
'FROM temp_regression'
INTO STRICT slope, intercept, correlation, total_measurements;

Este código llama a la función corr PostgreSQL para calcular la correlación de Pearson en los datos. Idealmente, me gustaría hacer lo siguiente (cambiando corr para plr_kendall):

EXECUTE 'SELECT '
  'regr_slope( amount, year_taken ),'
  'regr_intercept( amount, year_taken ),'
  'plr_kendall( amount, year_taken ),'
  'sum( measurements ) AS total_measurements '
'FROM temp_regression'
INTO STRICT slope, intercept, correlation, total_measurements;

P.8. ¿Tengo que escribir plr_kendall mismo?
Q.9 ¿Dónde puedo encontrar un sencilla ejemplo, que camina a través de:.

  1. Carga de un módulo R en PG.
  2. Escritura de una envoltura de PG para la función R deseado.
  3. Llamar a la envoltura PG de un SELECT.

Por ejemplo, serían los dos últimos pasos aspecto:

create or replace function plr_kendall( _float8, _float8 ) returns float as '
  agg_kendall(arg1, arg2)
' language 'plr';

CREATE AGGREGATE agg_kendall (
  sfunc = plr_array_accum,
  basetype = float8, -- ???
  stype = _float8, -- ???
  finalfunc = plr_kendall
);

Y entonces el SELECT que el anterior?

Gracias!

¿Fue útil?

Solución

Descripción

lista

Estos pasos cómo llamar a una función de R PostgreSQL usando PL / I.

Prerequisties

Usted ya debe tener PostgreSQL, R, e instalado PL / I.

Pasos

  1. Encuentra R Nombre del módulo (por ejemplo, Kendall)
  2. Cambie al usuario de base de datos:
    sudo su - postgres
  3. Ejecutar R
    R
  4. Instalar R Module (aceptar $HOME/R/x86_64-pc-linux-gnu-library/2.9/):
    install.packages("Kendall", dependencies = TRUE)
  5. Elija un espejo CRAN, cuando se le solicite.
  6. Cree la siguiente tabla:
    CREATE TABLE plr_modules (
    modseq int4,
    modsrc text
    );
  7. Insertar en esa mesa de la directiva para cargar el módulo R en cuestión:
    INSERT INTO plr_modules
    VALUES (0, 'library(Kendall)' );
  8. Reiniciar la base de datos (o SELECT * FROM reload_plr_modules();):
    sudo /etc/init.d/postgresql-8.4 restart
  9. Crea una función de contenedor en PostgreSQL:
    CREATE OR REPLACE FUNCTION climate.plr_corr_kendall(
    double precision[],
    double precision[] )
    RETURNS double precision AS
    $BODY$
    Kendall(arg1, arg2)
    $BODY$
    LANGUAGE 'plr' VOLATILE STRICT;
  10. Crea una función que utiliza la función de contenedor.
  11. Prueba la nueva función.

Envoltura Función

Esta función realiza el trabajo de recopilación de datos de la base de datos y la creación de dos matrices. Estas matrices se pasan a la función plr_corr_kendall envoltura.

CREATE OR REPLACE FUNCTION climate.analysis_vector()
RETURNS double precision AS
$BODY$
DECLARE
  v_year_taken double precision[];
  v_amount double precision[];
  i RECORD;
BEGIN
  FOR i IN (
  SELECT
    extract(YEAR FROM m.taken) AS year_taken,
    avg( m.amount ) AS amount
  FROM
    climate.city c,
    climate.station s,
    climate.station_category sc,
    climate.measurement m
  WHERE 
    c.id = 5148 AND 
    earth_distance( 
      ll_to_earth(c.latitude_decimal,c.longitude_decimal), 
      ll_to_earth(s.latitude_decimal,s.longitude_decimal)) <= 30 AND 
    s.elevation BETWEEN 0  AND  3000  AND 
    s.applicable AND 
    sc.station_id = s.id AND 
    sc.category_id = 1 AND 
    extract(YEAR FROM sc.taken_start) >= 1900 AND 
    extract(YEAR FROM sc.taken_end) <= 2009 AND 
    m.station_id = s.id AND 
    m.taken BETWEEN sc.taken_start AND sc.taken_end AND 
    m.category_id = sc.category_id 
  GROUP BY 
    extract(YEAR FROM m.taken)
  ORDER BY
    extract(YEAR FROM m.taken)
  ) LOOP
    SELECT array_append( v_year_taken, i.year_taken ) INTO v_year_taken;
    SELECT array_append( v_amount, i.amount::double precision ) INTO v_amount;
  END LOOP;

  RAISE NOTICE '%', v_year_taken;
  RAISE NOTICE '%', v_amount;

  RETURN climate.plr_corr_kendall( v_year_taken, v_amount );
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

prueba

Prueba la función como sigue:

SELECT
  *
FROM
  climate.analysis_vector();

Resultados

Un número: -0,0578900910913944

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top