Componente Executar R Script
Este artigo descreve como usar o componente Executar Script R para executar o código R em seu pipeline do Azure Machine Learning Designer.
Com o R, você pode realizar tarefas que não são suportadas por componentes existentes, como:
- Criar transformações de dados personalizadas
- Usar suas próprias métricas para avaliar previsões
- Criar modelos usando algoritmos que não são implementados como componentes independentes no designer
Suporte à versão R
O Azure Machine Learning Designer usa a distribuição CRAN (Rede Abrangente de Arquivos R) do R. A versão usada no momento é a CRAN 3.5.1.
Pacotes do R com suporte
O ambiente do R é pré-instalado com mais de 100 pacotes. Para ver uma lista completa, confira a seção Pacotes do R pré-instalados.
Você também pode adicionar o código a seguir a qualquer componente Executar Script R 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))
}
Observação
Se o pipeline contiver vários componentes Executar Script R que precisam de pacotes que não estão na lista pré-instalada, instale os pacotes em cada componente.
Instalando pacotes R
Nesse caso, para instalar pacotes do R adicionais, use o método install.packages()
. Os pacotes são instalados para cada componente Executar Script R. Eles não são compartilhados entre outros componentes Executar Script R.
Observação
NÃO é recomendável instalar o pacote do R do pacote de script. É recomendável instalar pacotes diretamente no editor de scripts.
Especifique o repositório CRAN ao instalar pacotes, como install.packages("zoo",repos = "https://cloud.r-project.org")
.
Aviso
O componente Executar Script R não dá suporte à instalação de pacotes que exijam compilação nativa, como o pacote qdap
que requer JAVA e o pacote drc
que requer C++. Isso porque esse componente é executado em um ambiente pré-instalado com permissão não administrativa.
Não instale pacotes pré-criados no/para Windows, pois os componentes de designer estão em execução no Ubuntu. Para verificar se um pacote é pré-compilado no Windows, você pode ir até CRAN e pesquisar seu pacote, baixar um arquivo binário de acordo com seu sistema operacional e verificar a parte de Compilação: no arquivo de DESCRIÇÃO. Veja a seguir 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))
}
Observação
Antes de instalar um pacote, verifique se ele já existe, para que você não repita uma instalação. As instalações repetidas podem fazer com que as solicitações de serviço Web atinjam o tempo limite.
Acesso ao conjunto de dados registrado
Você pode conferir o seguinte código de exemplo para acessar os conjuntos de dados registrados no seu workspace:
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 módulo Executar Script R
O componente Script R 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 do R quando carregados com esse componente.
Adicione o componente Executar Script R ao seu pipeline.
Conecte as entradas que o script precisa. As entradas são opcionais e podem incluir dados e código R adicional.
DataSet1: 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: referência à segunda entrada como
dataframe2
. Esse conjuntos 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 Script: a terceira entrada aceita arquivos .zip. Um arquivo compactado .zip pode conter vários arquivos e vários tipos de arquivo.
Na caixa de texto Script R digite ou cole um script R válido.
Observação
Tenha cuidado ao escrever o seu script. Verifique se não há erros de sintaxe, como o uso de variáveis não declaradas, componentes ou funções não importadas. Preste uma atenção extra à lista de pacotes pré-instalados no final deste artigo. Para usar pacotes que não estejam listados, instale-os em seu script. Um exemplo é
install.packages("zoo",repos = "https://cloud.r-project.org")
.Para ajudá-lo a iniciar, a caixa de texto Script R é preenchida previamente com o 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 precisa ter os argumentos de entrada
Param<dataframe1>
eParam<dataframe2>
, mesmo quando esses argumentos não sejam usados no seu script.Observação
Os dados passados para o componente Executar Script R são referenciados como
dataframe1
edataframe2
, que é diferente do Azure Machine Learning Designer(a referência do designer comodataset1
,dataset2
). Certifique-se de que os dados de entrada são referenciados corretamente em seu script.Observação
O código R existente pode precisar de pequenas alterações para ser executado em um pipeline do designer. Por exemplo, os dados de entrada que você fornece no formato CSV devem ser explicitamente convertidos para um conjunto de dados antes de você poder usá-los em seu código. Os tipos de dados e colunas usados na linguagem R também apresentam algumas diferenças dos tipos de dados e colunas usados no designer.
Se o seu script tiver mais de 16 KB, use a porta de Pacote de Script 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 do conjunto de dados da lista Conjuntos de dados no painel do componente à esquerda na página criação do designer.
- Conecte o componente do conjunto de dados na porta Pacote de Script do componente Executar Script R.
Veja a seguir 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 Semente Aleatória, insira um valor a ser usado dentro do ambiente de R como o valor de semente aleatória. Este parâmetro é equivalente a chamar
set.seed(value)
no código de R.Enviar o pipeline.
Resultados
Os componentes de Executar Script R podem retornar várias saídas, mas elas devem ser fornecidas como quadros de dados do R. O designer converte automaticamente os quadros de dados em conjuntos de dados para obter compatibilidade com outros componentes.
As mensagens e os erros padrões do 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 exemplo
Há várias maneiras de estender seu pipeline usando scripts R personalizados. Esta seção fornece um código de exemplo para tarefas comuns.
Adicionar um script R como uma entrada
O componente Executar Script R dá suporte a 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 contenha o código R para seu espaço de trabalho, vá para a página de ativos do Conjuntos de dados. Selecione Criar conjunto de dados e, em seguida, selecione Do arquivo local e a opção de tipo de conjunto de dados 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 Script.
Todos os arquivos no arquivo. zip estão disponíveis durante o tempo de execução do pipeline.
Se o arquivo do 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 ./Pacote de Script 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 conjuntos 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 como mydatafile.csv.
- Crie um arquivo .zip e adicione o arquivo CSV ao arquivo.
- Carregue o arquivo .zip no workspace do Azure Machine Learning.
- Conecte o conjunto de dados resultante para a entrada ScriptBundle do seu componente Executar Script R.
- Use o código a seguir para ler os dados CSV do arquivo .zip.
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 conjuntos de dados para equilibrar o exemplo:
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))
}
Passando objetos R entre componentes Executar Script R
Você pode passar objetos R entre instâncias do componente Executar Script R usando o mecanismo de serialização interna. Este exemplo pressupõe que você deseja mover o objeto R chamado A
entre dois componentes Executar Script R.
Adicione o primeiro componente Executar Script R ao seu pipeline. Em seguida, insira o seguinte código na caixa de texto Script R para criar um objeto serializado
A
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 do tipo inteiro é feita porque a função de serialização gera dados de saída no formato R
Raw
, que não é suportado pelo designer.Adicione uma segunda instância do componente Executar Script R e conecte-a à porta de saída do componente anterior.
Digite o seguinte código 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 do R pré-instalados
Os seguintes pacotes do R pré-instalados estão disponíveis no momento:
Pacote | Versão |
---|---|
askpass | 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 |
sinal de interpolação | 6.0-84 |
caTools | 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 |
colorspace | 1.4-1 |
compiler | 3.5.1 |
crayon | 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 |
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 |
Genéricos | 0.0.2 |
ggplot2 | 3.2.0 |
glmnet | 2.0-18 |
glue | 1.3.1 |
gower | 0.2.1 |
gplots | 3.0.1.1 |
elemento gráfico | 3.5.1 |
grDevices | 3.5.1 |
grade | 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 |
Matriz | 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 |
Próximas etapas
Confira o conjunto de componentes disponíveis no Azure Machine Learning.