Spuštění komponenty skriptu jazyka R

Tento článek popisuje, jak pomocí komponenty Execute R Script (Spustit skript jazyka R) spustit kód R v kanálu návrháře služby Azure Machine Learning.

Pomocí jazyka R můžete provádět úlohy, které nejsou podporovány stávajícími komponentami, například:

  • Vytváření vlastních transformací dat
  • Použití vlastních metrik k vyhodnocení předpovědí
  • Vytváření modelů pomocí algoritmů, které nejsou implementované jako samostatné komponenty v návrháři

Podpora verzí jazyka R

Návrhář služby Azure Machine Learning používá distribuci R (Comprehensive R Archive Network) CRAN (Comprehensive R Archive Network). Aktuálně používaná verze je CRAN 3.5.1.

Podporované balíčky R

Prostředí R je předinstalované s více než 100 balíčky. Úplný seznam najdete v části Předinstalované balíčky R.

Do libovolné komponenty Execute R Script můžete také přidat následující kód, abyste viděli nainstalované balíčky.

azureml_main <- function(dataframe1, dataframe2){
  print("R script run.")
  dataframe1 <- data.frame(installed.packages())
  return(list(dataset1=dataframe1, dataset2=dataframe2))
}

Poznámka

Pokud váš kanál obsahuje více komponent skriptu R, které potřebují balíčky, které nejsou v předinstalovaného seznamu, nainstalujte balíčky do každé komponenty.

Instalace balíčků jazyka R

Pokud chcete nainstalovat další balíčky R, použijte metodu install.packages() . Balíčky se instalují pro každou komponentu skriptu Execute R. Nesdílejí se mezi ostatními komponentami skriptu R.

Poznámka

Nedoporučuje se instalovat balíček R ze sady skriptů. Doporučujeme instalovat balíčky přímo v editoru skriptů. Při instalaci balíčků zadejte úložiště CRAN, například install.packages("zoo",repos = "https://cloud.r-project.org").

Upozornění

Komponenta Excute R Script nepodporuje instalaci balíčků, které vyžadují nativní kompilaci, jako qdap je balíček, který vyžaduje JAVA a drc balíček, který vyžaduje C++. Je to proto, že tato komponenta se spouští v předinstalovaném prostředí s oprávněním bez oprávnění správce. Neinstalujte balíčky, které jsou předem vytvořené v systému Windows nebo pro Systém Windows, protože komponenty návrháře jsou spuštěné na Ubuntu. Pokud chcete zkontrolovat, jestli je balíček předem sestavený v systému Windows, můžete přejít do CRAN a vyhledat balíček, stáhnout jeden binární soubor podle vašeho operačního systému a zaškrtnout políčko Sestaveno: část v souboru DESCRIPTION . Následuje příklad: Popis balíčku R

Tato ukázka ukazuje, jak nainstalovat Zoo:

# R version: 3.5.1
# The script MUST contain a function named azureml_main,
# which is the entry point for this component.

# Note that functions dependent on the X11 library,
# such as "View," are not supported because the X11 library
# is not preinstalled.

# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be null.
#   Param<dataframe1>: a R DataFrame
#   Param<dataframe2>: a R DataFrame
azureml_main <- function(dataframe1, dataframe2){
  print("R script run.")
  
  if(!require(zoo)) install.packages("zoo",repos = "https://cloud.r-project.org")
  library(zoo)
  # Return datasets as a Named List
  return(list(dataset1=dataframe1, dataset2=dataframe2))
}

Poznámka

Před instalací balíčku zkontrolujte, jestli už existuje, abyste instalaci neopakovali. Opakované instalace můžou způsobit vypršení časového limitu požadavků webové služby.

Přístup k registrované datové sadě

Pro přístup k registrovaným datovým sadám v pracovním prostoru můžete použít následující ukázkový kód:

azureml_main <- function(dataframe1, dataframe2){
  print("R script run.")
  run = get_current_run()
  ws = run$experiment$workspace
  dataset = azureml$core$dataset$Dataset$get_by_name(ws, "YOUR DATASET NAME")
  dataframe2 <- dataset$to_pandas_dataframe()
  # Return datasets as a Named List
  return(list(dataset1=dataframe1, dataset2=dataframe2))
}

Konfigurace spuštění skriptu jazyka R

Komponenta Execute R Script obsahuje ukázkový kód jako výchozí bod.

Diagram vstupů pro komponentu jazyka R

Datové sady uložené v návrháři se při načtení s touto komponentou automaticky převedou na datový rámec R.

  1. Přidejte komponentu Execute R Script do kanálu.

  2. Připojte všechny vstupy, které skript potřebuje. Vstupy jsou volitelné a můžou obsahovat data a další kód R.

    • Datová sada1: Odkaz na první vstup jako dataframe1. Vstupní datová sada musí být formátovaná jako soubor CSV, TSV nebo ARFF. Nebo můžete připojit datovou sadu Azure Machine Learning.

    • Datová sada2: Odkaz na druhý vstup jako dataframe2. Tato datová sada musí být také naformátovaná jako soubor CSV, TSV nebo ARFF nebo jako datová sada Azure Machine Learning.

    • Sada skriptů: Třetí vstup přijímá soubory .zip. Komprimovaný soubor může obsahovat více souborů a více typů souborů.

  3. Do textového pole Skript jazyka R zadejte nebo vložte platný skript jazyka R.

    Poznámka

    Při psaní skriptu buďte opatrní. Ujistěte se, že nedochází k žádným chybám syntaxe, jako je použití nehlášených proměnných nebo neimportovaných komponent nebo funkcí. Věnujte zvláštní pozornost seznamu předinstalovaných balíčků na konci tohoto článku. Pokud chcete používat balíčky, které nejsou uvedené, nainstalujte je do skriptu. Příklad: install.packages("zoo",repos = "https://cloud.r-project.org").

    Abyste mohli začít, textové pole Skript jazyka R je předem vyplněno ukázkovým kódem, který můžete upravit nebo nahradit.

    # R version: 3.5.1
    # The script MUST contain a function named azureml_main,
    # which is the entry point for this component.
    
    # Note that functions dependent on the X11 library,
    # such as "View," are not supported because the X11 library
    # is not preinstalled.
    
    # The entry point function MUST have two input arguments.
    # If the input port is not connected, the corresponding
    # dataframe argument will be null.
    #   Param<dataframe1>: a R DataFrame
    #   Param<dataframe2>: a R DataFrame
    azureml_main <- function(dataframe1, dataframe2){
    print("R script run.")
    
    # If a .zip file is connected to the third input port, it's
    # unzipped under "./Script Bundle". This directory is added
    # to sys.path.
    
    # Return datasets as a Named List
    return(list(dataset1=dataframe1, dataset2=dataframe2))
    }
    

    Funkce vstupního bodu musí mít vstupní argumenty Param<dataframe1> a , i Param<dataframe2>když se tyto argumenty ve funkci nepoužívají.

    Poznámka

    Na data předaná komponentě Execute R Script se odkazuje jako dataframe1 na a dataframe2, což se liší od návrháře Služby Azure Machine Learning (návrhář odkazuje na dataset1, dataset2). Ujistěte se, že se ve skriptu správně odkazuje na vstupní data.

    Poznámka

    Existující kód R může vyžadovat menší změny ke spuštění v kanálu návrháře. Například vstupní data, která zadáte ve formátu CSV, by měla být explicitně převedena na datovou sadu, abyste ji mohli použít v kódu. Datové a sloupcové typy používané v jazyce R se také v některých ohledech liší od datových typů a typů sloupců používaných v návrháři.

  4. Pokud je váš skript větší než 16 kB, použijte port sady skriptů, abyste se vyhnuli chybám, jako je překročení limitu 16597 znaků.

    1. Sbalte skript a další vlastní prostředky do souboru ZIP.
    2. Nahrajte soubor zip jako datovou sadu souborů do studia.
    3. Přetáhněte komponentu datové sady ze seznamu Datové sady v levém podokně komponent na stránce pro vytváření návrháře.
    4. Připojte komponentu datové sady k portu sady skriptů komponenty Execute R Script .

    Následuje ukázkový kód pro použití skriptu v sadě skriptů:

    azureml_main <- function(dataframe1, dataframe2){
    # Source the custom R script: my_script.R
    source("./Script Bundle/my_script.R")
    
    # Use the function that defined in my_script.R
    dataframe1 <- my_func(dataframe1)
    
    sample <- readLines("./Script Bundle/my_sample.txt")
    return (list(dataset1=dataframe1, dataset2=data.frame("Sample"=sample)))
    }
    
  5. Do pole Random Seed (Náhodné počáteční) zadejte hodnotu, která se má použít v prostředí R jako náhodná počáteční hodnota. Tento parametr je ekvivalentem volání set.seed(value) v kódu R.

  6. Odešlete kanál.

Výsledky

Komponenty skriptu spouštění jazyka R mohou vracet více výstupů, ale musí být poskytnuty jako datové rámce R. Návrhář automaticky převede datové rámce na datové sady z důvodu kompatibility s jinými komponentami.

Standardní zprávy a chyby z jazyka R se vrátí do protokolu komponenty.

Pokud potřebujete vytisknout výsledky ve skriptu jazyka R, najdete vytištěné výsledky v 70_driver_log na kartě Výstupy+protokoly na pravém panelu komponenty.

Ukázkové skripty

Kanál můžete rozšířit mnoha způsoby pomocí vlastních skriptů jazyka R. Tato část obsahuje ukázkový kód pro běžné úlohy.

Přidání skriptu jazyka R jako vstupu

Komponenta Execute R Script podporuje jako vstupy libovolné soubory skriptů jazyka R. Pokud je chcete použít, musíte je nahrát do pracovního prostoru jako součást souboru .zip.

  1. Pokud chcete do pracovního prostoru nahrát soubor .zip, který obsahuje kód R, přejděte na stránku assetu Datové sady . Vyberte Vytvořit datovou sadu a pak vyberte Z místního souboru a možnost Typ datové sady Soubor .

  2. Ověřte, že se komprimovaný soubor zobrazuje v části Moje datové sady v kategorii Datové sady ve stromu levé komponenty.

  3. Připojte datovou sadu ke vstupnímu portu sady skriptů .

  4. Všechny soubory v souboru .zip jsou k dispozici během běhu kanálu.

    Pokud soubor sady skriptů obsahoval adresářovou strukturu, struktura se zachová. Je však nutné změnit kód tak, aby se adresář ./Script Bundle předem na cestu.

Zpracování dat

Následující ukázka ukazuje, jak škálovat a normalizovat vstupní data:

# R version: 3.5.1
# The script MUST contain a function named azureml_main,
# which is the entry point for this component.

# Note that functions dependent on the X11 library,
# such as "View," are not supported because the X11 library
# is not preinstalled.

# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be null.
#   Param<dataframe1>: a R DataFrame
#   Param<dataframe2>: a R DataFrame
azureml_main <- function(dataframe1, dataframe2){
  print("R script run.")
  # If a .zip file is connected to the third input port, it's
  # unzipped under "./Script Bundle". This directory is added
  # to sys.path.
  series <- dataframe1$width
  # Find the maximum and minimum values of the width column in dataframe1
  max_v <- max(series)
  min_v <- min(series)
  # Calculate the scale and bias
  scale <- max_v - min_v
  bias <- min_v / dis
  # Apply min-max normalizing
  dataframe1$width <- dataframe1$width / scale - bias
  dataframe2$width <- dataframe2$width / scale - bias
  # Return datasets as a Named List
  return(list(dataset1=dataframe1, dataset2=dataframe2))
}

Čtení souboru .zip jako vstupu

Tato ukázka ukazuje, jak použít datovou sadu v souboru .zip jako vstup do komponenty Execute R Script.

  1. Vytvořte datový soubor ve formátu CSV a pojmenujte ho mydatafile.csv.
  2. Vytvořte soubor .zip a přidejte ho do archivu.
  3. Nahrajte komprimovaný soubor do pracovního prostoru Služby Azure Machine Learning.
  4. Připojte výslednou datovou sadu ke vstupu ScriptBundle vaší komponenty Execute R Script .
  5. Ke čtení dat CSV ze zazipovaného souboru použijte následující kód.
azureml_main <- function(dataframe1, dataframe2){
  print("R script run.")
  mydataset<-read.csv("./Script Bundle/mydatafile.csv",encoding="UTF-8");  
  # Return datasets as a Named List
  return(list(dataset1=mydataset, dataset2=dataframe2))
}

Replikace řádků

Tato ukázka ukazuje, jak replikovat kladné záznamy v datové sadě, aby se vzorek vyrovnaly:

azureml_main <- function(dataframe1, dataframe2){
  data.set <- dataframe1[dataframe1[,1]==-1,]  
  # positions of the positive samples
  pos <- dataframe1[dataframe1[,1]==1,]
  # replicate the positive samples to balance the sample  
  for (i in 1:20) data.set <- rbind(data.set,pos)  
  row.names(data.set) <- NULL
  # Return datasets as a Named List
  return(list(dataset1=data.set, dataset2=dataframe2))
}

Předávání objektů R mezi komponentami Skriptu jazyka R

Objekty R můžete předat mezi instancemi komponenty Execute R Script pomocí mechanismu interní serializace. Tento příklad předpokládá, že chcete přesunout objekt R s názvem A mezi dvěma komponentami Execute R Script.

  1. Přidejte do svého kanálu první komponentu Execute R Script (Spustit skript R ). Potom zadejte následující kód do textového pole Skript jazyka R , který vytvoří serializovaný objekt A jako sloupec v tabulce výstupních dat komponenty:

    azureml_main <- function(dataframe1, dataframe2){
      print("R script run.")
      # some codes generated A
    
      serialized <- as.integer(serialize(A,NULL))  
      data.set <- data.frame(serialized,stringsAsFactors=FALSE)
    
      return(list(dataset1=data.set, dataset2=dataframe2))
    }
    

    Explicitní převod na typ integer se provádí, protože funkce serializace výstupem dat ve formátu R Raw , který návrhář nepodporuje.

  2. Přidejte druhou instanci komponenty Execute R Script a připojte ji k výstupnímu portu předchozí komponenty.

  3. Do textového pole Skript jazyka R zadejte následující kód, který extrahuje objekt A z tabulky vstupních dat.

    azureml_main <- function(dataframe1, dataframe2){
      print("R script run.")
      A <- unserialize(as.raw(dataframe1$serialized))  
      # Return datasets as a Named List
      return(list(dataset1=dataframe1, dataset2=dataframe2))
    }
    

Předinstalované balíčky R

Aktuálně jsou k dispozici následující předinstalované balíčky R:

Balíček Verze
zadat heslo 1.1
assertthat 0.2.1
backports 1.1.4
base 3.5.1
base64enc 0.1-3
BH 1.69.0-1
bindr 0.1.1
bindrcpp 0.2.2
bitops 1.0-6
boot 1.3-22
broom 0.5.2
callr 3.2.0
stříška 6.0-84
caTools 1.17.1.2
cellranger 1.1.0
class 7.3-15
cli 1.1.0
clipr 0.6.0
cluster 2.0.7-1
codetools 0.2-16
colorspace 1.4-1
compiler 3.5.1
crayon 1.3.4
curl 3.3
data.table 1.12.2
datové sady 3.5.1
DBI 1.0.0
dbplyr 1.4.1
digest 0.6.19
dplyr 0.7.6
e1071 1.7-2
evaluate 0.14
fansi 0.4.0
forcats 0.3.0
foreach 1.4.4
foreign 0.8-71
Fs 1.3.1
gdata 2.18.0
Generik 0.0.2
ggplot2 3.2.0
glmnet 2.0-18
glue 1.3.1
gower 0.2.1
gplots 3.0.1.1
grafika 3.5.1
grDevices 3.5.1
grid 3.5.1
gtable 0.3.0
gtools 3.8.1
haven 2.1.0
highr 0.8
hms 0.4.2
htmltools 0.3.6
httr 1.4.0
ipred 0.9-9
iterators 1.0.10
jsonlite 1.6
KernSmooth 2.23-15
knitr 1.23
labeling 0.3
lattice 0.20-38
lava 1.6.5
lazyeval 0.2.2
lubridate 1.7.4
magrittr 1.5
markdown 1
MASS 7.3-51.4
Matice 1.2-17
methods 3.5.1
mgcv 1.8-28
mime 0.7
ModelMetrics 1.2.2
modelr 0.1.4
munsell 0.5.0
nlme 3.1-140
nnet 7.3-12
numDeriv 2016.8-1.1
openssl 1.4
parallel 3.5.1
pillar 1.4.1
pkgconfig 2.0.2
plogr 0.2.0
plyr 1.8.4
prettyunits 1.0.2
processx 3.3.1
prodlim 2018.04.18
progress 1.2.2
Ps 1.3.0
purrr 0.3.2
quadprog 1.5-7
quantmod 0.4-15
R6 2.4.0
randomForest 4.6-14
RColorBrewer 1.1-2
Rcpp 1.0.1
RcppRoll 0.3.0
readr 1.3.1
readxl 1.3.1
recipes 0.1.5
rematch 1.0.1
reprex 0.3.0
reshape2 1.4.3
reticulate 1.12
rlang 0.4.0
rmarkdown 1.13
ROCR 1.0-7
rpart 4.1-15
rstudioapi 0.1
rvest 0.3.4
scales 1.0.0
selectr 0.4-1
spatial 7.3-11
splines 3.5.1
SQUAREM 2017.10-1
stats 3.5.1
stats4 3.5.1
stringi 1.4.3
stringr 1.3.1
survival 2.44-1.1
sys 3.2
tcltk 3.5.1
tibble 2.1.3
tidyr 0.8.3
tidyselect 0.2.5
tidyverse 1.2.1
timeDate 3043.102
tinytex 0.13
tools 3.5.1
tseries 0.10-47
TTR 0.23-4
utf8 1.1.4
utils 3.5.1
vctrs 0.1.0
viridisLite 0.3.0
whisker 0.3-2
withr 2.1.2
xfun 0.8
xml2 1.2.0
xts 0.11-2
yaml 2.2.0
zeallot 0.1.0
zoo 1.8-6

Další kroky

Podívejte se na sadu komponent dostupných pro Azure Machine Learning.