Componente Executar Script R
Este artigo descreve como usar o componente Executar Script R para executar o código R no pipeline do designer do Azure Machine Learning.
Com R, você pode executar tarefas que não são suportadas por componentes existentes, como:
- Criar transformações de dados personalizadas
- Use suas próprias métricas para avaliar previsões
- Crie modelos usando algoritmos que não são implementados como componentes autônomos no designer
Suporte à versão R
O designer do Azure Machine Learning usa a distribuição CRAN (Comprehensive R Archive Network) de R. A versão atualmente utilizada é CRAN 3.5.1.
Pacotes R suportados
O ambiente R é pré-instalado com mais de 100 pacotes. Para obter uma lista completa, consulte a seção Pacotes R pré-instalados.
Você também pode adicionar o código a seguir a qualquer componente Execute R Script, para ver os pacotes instalados.
azureml_main <- function(dataframe1, dataframe2){
print("R script run.")
dataframe1 <- data.frame(installed.packages())
return(list(dataset1=dataframe1, dataset2=dataframe2))
}
Nota
Se o pipeline contiver vários componentes do Execute R Script que precisam de pacotes que não estão na lista pré-instalada, instale os pacotes em cada componente.
Instalação de pacotes R
Para instalar pacotes R adicionais, use o install.packages()
método. Os pacotes são instalados para cada componente Execute R Script. Eles não são compartilhados entre outros componentes do Execute R Script.
Nota
NÃO é recomendado instalar o pacote R a partir do pacote de scripts. Recomenda-se instalar pacotes diretamente no editor de scripts.
Especifique o repositório CRAN quando estiver instalando pacotes, como install.packages("zoo",repos = "https://cloud.r-project.org")
.
Aviso
O componente Excute R Script não suporta a instalação de pacotes que exigem compilação nativa, como qdap
o pacote que requer JAVA e drc
o pacote que requer C++. Isso ocorre porque esse componente é executado em um ambiente pré-instalado com permissão de não administrador.
Não instale pacotes que são pré-construídos em / para Windows, uma vez que os componentes do designer estão sendo executados no Ubuntu. Para verificar se um pacote é pré-construído no Windows, você pode ir para CRAN e pesquisar seu pacote, baixar um arquivo binário de acordo com seu sistema operacional e verificar Built: parte no arquivo DESCRIPTION . Segue-se um exemplo:
Este exemplo mostra como instalar o 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))
}
Nota
Antes de instalar um pacote, verifique se ele já existe para não repetir uma instalação. Instalações repetidas podem fazer com que as solicitações de serviço Web atinjam o tempo limite.
Acesso ao conjunto de dados registado
Você pode consultar o seguinte código de exemplo para acessar os conjuntos de dados registrados em seu espaço de trabalho:
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))
}
Como configurar o Execute R Script
O componente Execute R Script contém código de exemplo como ponto de partida.
Os conjuntos de dados armazenados no designer são convertidos automaticamente em um quadro de dados R quando carregados com esse componente.
Adicione o componente Executar Script R ao seu pipeline.
Conecte todas as entradas que o script precisa. As entradas são opcionais e podem incluir dados e código R adicional.
Dataset1: Faça referência à primeira entrada como
dataframe1
. O conjunto de dados de entrada deve ser formatado como um arquivo CSV, TSV ou ARFF. Ou você pode conectar um conjunto de dados do Azure Machine Learning.Dataset2: Referenciar a segunda entrada como
dataframe2
. Esse conjunto de dados também deve ser formatado como um arquivo CSV, TSV ou ARFF ou como um conjunto de dados do Azure Machine Learning.Pacote de scripts: A terceira entrada aceita arquivos .zip. Um arquivo compactado pode conter vários arquivos e vários tipos de arquivos.
Na caixa de texto Script R, digite ou cole script R válido.
Nota
Tenha cuidado ao escrever seu roteiro. Verifique se não há erros de sintaxe, como o uso de variáveis não declaradas ou componentes ou funções não importados. Preste atenção extra à lista de pacotes pré-instalados no final deste artigo. Para usar pacotes que não estão listados, instale-os no script. Um exemplo é
install.packages("zoo",repos = "https://cloud.r-project.org")
.Para ajudá-lo a começar, a caixa de texto Script R é pré-preenchida com código de exemplo, que você pode editar ou substituir.
# 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)) }
A função de ponto de entrada deve ter os argumentos
Param<dataframe1>
de entrada eParam<dataframe2>
, mesmo quando esses argumentos não são usados na função.Nota
Os dados passados para o componente Executar Script R são referenciados como
dataframe1
edataframe2
, que é diferente do designer do Azure Machine Learning (a referência do designer comodataset1
,dataset2
). Certifique-se de que os dados de entrada são referenciados corretamente em seu script.Nota
O código R existente pode precisar de pequenas alterações para ser executado em um pipeline de designer. Por exemplo, os dados de entrada fornecidos no formato CSV devem ser explicitamente convertidos em um conjunto de dados antes que você possa usá-los em seu código. Os tipos de dados e colunas usados na linguagem R também diferem em alguns aspetos dos tipos de dados e colunas usados no designer.
Se o script for maior que 16 KB, use a porta do pacote de scripts para evitar erros como CommandLine excede o limite de 16597 caracteres.
- Agrupe o script e outros recursos personalizados em um arquivo zip.
- Carregue o arquivo zip como um conjunto de dados de arquivo para o estúdio.
- Arraste o componente de conjunto de dados da lista Conjuntos de dados no painel de componentes esquerdo na página de criação do designer.
- Conecte o componente de conjunto de dados à porta Script Bundle do componente Execute R Script .
A seguir está o código de exemplo para consumir o script no pacote de script:
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))) }
Para Random Seed, insira um valor para usar dentro do ambiente R como o valor de semente aleatória. Este parâmetro é equivalente a chamar
set.seed(value)
o código R.Envie o pipeline.
Resultados
Os componentes Execute R Script podem retornar várias saídas, mas devem ser fornecidos como quadros de dados R. O designer converte automaticamente quadros de dados em conjuntos de dados para compatibilidade com outros componentes.
Mensagens padrão e erros de R são retornados para o log do componente.
Se você precisar imprimir resultados no script R, poderá encontrar os resultados impressos em 70_driver_log na guia Saídas+logs no painel direito do componente.
Scripts de amostra
Há muitas maneiras de estender seu pipeline usando scripts R personalizados. Esta seção fornece código de exemplo para tarefas comuns.
Adicionar um script R como entrada
O componente Executar Script R suporta arquivos de script R arbitrários como entradas. Para usá-los, você deve carregá-los em seu espaço de trabalho como parte do arquivo .zip.
Para carregar um arquivo .zip que contém código R para seu espaço de trabalho, vá para a página do ativo Conjuntos de dados. Selecione Criar conjunto de dados e, em seguida, selecione Do arquivo local e a opção Tipo de conjunto de dados do arquivo .
Verifique se o arquivo compactado aparece em Meus Conjuntos de Dados na categoria Conjuntos de Dados na árvore de componentes à esquerda.
Conecte o conjunto de dados à porta de entrada do Pacote de Scripts .
Todos os arquivos no arquivo .zip estão disponíveis durante o tempo de execução do pipeline.
Se o arquivo de pacote de script contiver uma estrutura de diretório, a estrutura será preservada. Mas você deve alterar seu código para preceder o diretório ./Script Bundle para o caminho.
Processar dados
O exemplo a seguir mostra como dimensionar e normalizar dados de entrada:
# 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))
}
Ler um arquivo .zip como entrada
Este exemplo mostra como usar um conjunto de dados em um arquivo .zip como uma entrada para o componente Executar script R.
- Crie o arquivo de dados no formato CSV e nomeie-o mydatafile.csv.
- Crie um arquivo .zip e adicione o arquivo CSV ao arquivo.
- Carregue o arquivo compactado em seu espaço de trabalho do Azure Machine Learning.
- Conecte o conjunto de dados resultante à entrada ScriptBundle do componente Execute R Script .
- Use o código a seguir para ler os dados CSV do arquivo compactado.
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))
}
Replicar linhas
Este exemplo mostra como replicar registros positivos em um conjunto de dados para equilibrar a amostra:
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))
}
Passar objetos R entre componentes do Execute R Script
Você pode passar objetos R entre instâncias do componente Executar Script R usando o mecanismo de serialização interno. Este exemplo pressupõe que você deseja mover o objeto R nomeado A
entre dois componentes Execute R Script.
Adicione o primeiro componente Execute R Script ao seu pipeline. Em seguida, insira o seguinte código na caixa de texto Script R para criar um objeto
A
serializado como uma coluna na tabela de dados de saída do componente: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)) }
A conversão explícita para o tipo inteiro é feita porque a função de serialização produz dados no formato R
Raw
, que o designer não suporta.Adicione uma segunda instância do componente Execute R Script e conecte-a à porta de saída do componente anterior.
Digite o código a seguir na caixa de texto Script R para extrair o objeto
A
da tabela de dados de entrada.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)) }
Pacotes R pré-instalados
Os seguintes pacotes R pré-instalados estão atualmente disponíveis:
Pacote | Versão |
---|---|
AskPass | 1.1 |
asserçãoat | 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 |
arranque | 1.3-22 |
vassoura | 0.5.2 |
Chamador | 3.2.0 |
acento circunflexo | 6.0-84 |
caFerramentas | 1.17.1.2 |
Cellranger | 1.1.0 |
classe | 7.3-15 |
cli | 1.1.0 |
Clipr | 0.6.0 |
cluster | 2.0.7-1 |
codetools | 0.2-16 |
espaço em cores | 1.4-1 |
compilador | 3.5.1 |
lápis de cor | 1.3.4 |
curl | 3.3 |
data.table | 1.12.2 |
conjuntos de dados | 3.5.1 |
DBI | 1.0.0 |
DBPlyr | 1.4.1 |
resumo | 0.6.19 |
dplyr | 0.7.6 |
E1071 | 1.7-2 |
evaluate | 0.14 |
Fãsi | 0.4.0 |
FORCATS | 0.3.0 |
foreach | 1.4.4 |
externa | 0.8-71 |
FS | 1.3.1 |
gdata | 2.18.0 |
Genéricos | 0.0.2 |
ggplot2 | 3.2.0 |
glmnet | 2.0-18 |
colar | 1.3.1 |
gower | 0.2.1 |
GPLOTS | 3.0.1.1 |
gráficos | 3.5.1 |
grDevices | 3.5.1 |
grelha | 3.5.1 |
gtable | 0.3.0 |
fezes | 3.8.1 |
Refúgio | 2.1.0 |
mais alto | 0.8 |
HMS | 0.4.2 |
htmltools | 0.3.6 |
httr | 1.4.0 |
ipred | 0.9-9 |
iteradores | 1.0.10 |
jsonlite | 1.6 |
KernSmooth | 2.23-15 |
Knitr | 1.23 |
etiquetagem | 0.3 |
lattice | 0.20-38 |
lava | 1.6.5 |
lazyeval | 0.2.2 |
lubridate | 1.7.4 |
magrittr | 1.5 |
Marcação | 1 |
MASSA | 7.3-51.4 |
Matriz | 1.2-17 |
métodos | 3.5.1 |
mgcv | 1.8-28 |
mime | 0.7 |
ModelMetrics | 1.2.2 |
Modelador | 0.1.4 |
munsell | 0.5.0 |
nlme | 3.1-140 |
nnet | 7.3-12 |
numDeriv | 2016.8-1.1 |
openssl | 1.4 |
paralelo | 3.5.1 |
pilar | 1.4.1 |
pkgconfig | 2.0.2 |
plogr | 0.2.0 |
plyr | 1.8.4 |
unidades bonitas | 1.0.2 |
processx | 3.3.1 |
prodlim | 2018.04.18 |
Progresso | 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 |
Leitor | 1.3.1 |
ReadXL | 1.3.1 |
receitas | 0.1.5 |
revanche | 1.0.1 |
Reprex | 0.3.0 |
remodelar2 | 1.4.3 |
reticulado | 1.12 |
rlang | 0.4.0 |
rmarkdown | 1.13 |
ROCR | 1.0-7 |
rpart | 4.1-15 |
rstudioapi | 0.1 |
Rvest | 0.3.4 |
escalas | 1.0.0 |
seletor | 0.4-1 |
espacial | 7.3-11 |
splines | 3.5.1 |
QUADRADO | 2017.10-1 |
estatísticas | 3.5.1 |
stats4 | 3.5.1 |
stringi | 1.4.3 |
stringr | 1.3.1 |
sobrevivência | 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 |
ferramentas | 3.5.1 |
Tseries | 0.10-47 |
TTR | 0.23-4 |
UTF8 | 1.1.4 |
utilitários | 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 |
Jardim zoológico | 1.8-6 |
Próximos passos
Consulte o conjunto de componentes disponíveis para o Azure Machine Learning.