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:
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.
Datové sady uložené v návrháři se při načtení s touto komponentou automaticky převedou na datový rámec R.
Přidejte komponentu Execute R Script do kanálu.
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ů.
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 , iParam<dataframe2>
když se tyto argumenty ve funkci nepoužívají.Poznámka
Na data předaná komponentě Execute R Script se odkazuje jako
dataframe1
na adataframe2
, což se liší od návrháře Služby Azure Machine Learning (návrhář odkazuje nadataset1
,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.
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ů.
- Sbalte skript a další vlastní prostředky do souboru ZIP.
- Nahrajte soubor zip jako datovou sadu souborů do studia.
- 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.
- 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))) }
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.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.
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 .
Ověřte, že se komprimovaný soubor zobrazuje v části Moje datové sady v kategorii Datové sady ve stromu levé komponenty.
Připojte datovou sadu ke vstupnímu portu sady skriptů .
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.
- Vytvořte datový soubor ve formátu CSV a pojmenujte ho mydatafile.csv.
- Vytvořte soubor .zip a přidejte ho do archivu.
- Nahrajte komprimovaný soubor do pracovního prostoru Služby Azure Machine Learning.
- Připojte výslednou datovou sadu ke vstupu ScriptBundle vaší komponenty Execute R Script .
- 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.
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.Přidejte druhou instanci komponenty Execute R Script a připojte ji k výstupnímu portu předchozí komponenty.
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.