Executar componente de Script R

Este artigo descreve como utilizar o componente Executar Script R para executar código R no pipeline do estruturador do Azure Machine Learning.

Com o R, pode realizar tarefas que não são suportadas por componentes existentes, tais como:

  • Criar transformações de dados personalizadas
  • Utilizar as suas próprias métricas para avaliar predições
  • Criar modelos com algoritmos que não são implementados como componentes autónomos no estruturador

Suporte da versão R

O estruturador do Azure Machine Learning utiliza a distribuição CRAN (Rede de Arquivo R Abrangente) de R. A versão atualmente utilizada é CRAN 3.5.1.

Supported R packages (Pacotes R suportados)

O ambiente R está pré-instalado com mais de 100 pacotes. Para obter uma lista completa, veja a secção Pacotes R pré-instalados.

Também pode adicionar o seguinte código 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 Execute R Script que necessitem de pacotes que não estejam na lista pré-instalada, instale os pacotes em cada componente.

Instalar pacotes R

Para instalar pacotes R adicionais, utilize o install.packages() método . Os pacotes são instalados para cada componente Execute R Script. Não são partilhados entre outros componentes executar Script R.

Nota

NÃO é recomendado instalar o pacote R a partir do pacote de script. É recomendado instalar pacotes diretamente no editor de scripts. Especifique o repositório CRAN quando estiver a instalar 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 requerem compilação nativa, como qdap o pacote que requer JAVA e drc pacote que requer C++. Isto acontece porque este componente é executado num ambiente pré-instalado com permissão de não administrador. Não instale pacotes pré-criados no/para Windows, uma vez que os componentes do estruturador estão a ser executados no Ubuntu. Para verificar se um pacote está pré-criado nas janelas, pode aceder ao CRAN e procurar no seu pacote, transferir um ficheiro binário de acordo com o so e verificar a parte Built: no ficheiro DESCRIPTION . Segue-se um exemplo: descrição do pacote R

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 já existe para não repetir uma instalação. Repetir instalações pode fazer com que os pedidos de serviço Web excedam o tempo limite.

Acesso ao conjunto de dados registado

Pode consultar o seguinte código de exemplo para aceder aos conjuntos de dados registados na área 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 Executar Script R

O componente Executar Script R contém código de exemplo como ponto de partida.

Diagrama de entradas para um componente R

Os conjuntos de dados armazenados no estruturador são convertidos automaticamente num pacote de dados R quando carregados com este componente.

  1. Adicione o componente Executar Script R ao pipeline.

  2. Ligue as entradas de que o script precisa. As entradas são opcionais e podem incluir dados e código R adicional.

    • Conjunto de dados1: referencie a primeira entrada como dataframe1. O conjunto de dados de entrada tem de ser formatado como um ficheiro CSV, TSV ou ARFF. Em alternativa, pode ligar um conjunto de dados do Azure Machine Learning.

    • Conjunto de dados2: referencie a segunda entrada como dataframe2. Este conjunto de dados também tem de ser formatado como um ficheiro CSV, TSV ou ARFF ou como um conjunto de dados do Azure Machine Learning.

    • Pacote de Script: a terceira entrada aceita .zip ficheiros. Um ficheiro zipado pode conter vários ficheiros e vários tipos de ficheiro.

  3. Na caixa de texto script R , escreva ou cole script R válido.

    Nota

    Tenha cuidado ao escrever o script. Confirme que não existem erros de sintaxe, como utilizar variáveis não declaradas ou componentes ou funções não suportados. Preste atenção à lista de pacotes pré-instaladas no final deste artigo. Para utilizar pacotes que não estão listados, instale-os no script. Um exemplo é install.packages("zoo",repos = "https://cloud.r-project.org").

    Para o ajudar a começar, a caixa de texto Script R é pré-preenchida com código de exemplo, que 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 tem de ter os argumentos Param<dataframe1> de entrada e Param<dataframe2>, mesmo quando estes argumentos não são utilizados na função.

    Nota

    Os dados transmitidos ao componente Executar Script R são referenciados como dataframe1 e dataframe2, que são diferentes do estruturador do Azure Machine Learning (a referência do estruturador como dataset1, dataset2). Certifique-se de que os dados de entrada são referenciados corretamente no script.

    Nota

    O código R existente pode precisar de pequenas alterações para ser executado num pipeline de estruturador. Por exemplo, os dados de entrada fornecidos no formato CSV devem ser explicitamente convertidos num conjunto de dados antes de poder utilizá-lo no seu código. Os tipos de dados e colunas utilizados na linguagem R também diferem de algumas formas dos tipos de dados e colunas utilizados no estruturador.

  4. Se o script for superior a 16 KB, utilize a porta Pacote de Scripts para evitar erros como CommandLine exceder o limite de 16597 carateres.

    1. Agrupe o script e outros recursos personalizados a um ficheiro zip.
    2. Carregue o ficheiro zip como um Conjunto de Dados de Ficheiros para o estúdio.
    3. Arraste o componente do conjunto de dados da lista Conjuntos de dados no painel de componentes esquerdo na página de criação do estruturador.
    4. Ligue o componente do conjunto de dados à porta do Pacote de Scripts do componente Executar Script R .

    Segue-se o código de exemplo para consumir o script no pacote de scripts:

    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. Em Sementes Aleatórias, introduza um valor a utilizar dentro do ambiente R como o valor de seed aleatório. Este parâmetro é equivalente a chamar set.seed(value) no código R.

  6. Submeta o pipeline.

Resultados

Os componentes Executar Script R podem devolver várias saídas, mas têm de ser fornecidos como fotogramas de dados R. O estruturador converte automaticamente os pacotes de dados em conjuntos de dados para compatibilidade com outros componentes.

As mensagens padrão e os erros do R são devolvidos ao registo do componente.

Se precisar de imprimir resultados no script R, pode encontrar os resultados impressos em 70_driver_log no separador Saídas+registos no painel direito do componente.

Scripts de exemplo

Existem várias formas de expandir o pipeline com scripts R personalizados. Esta secção fornece código de exemplo para tarefas comuns.

Adicionar um script R como entrada

O componente Executar Script R suporta ficheiros de script R arbitrários como entradas. Para utilizá-las, tem de carregá-las para a área de trabalho como parte do ficheiro de .zip.

  1. Para carregar um ficheiro .zip que contém código R para a área de trabalho, aceda à página Recursos de conjuntos de dados . Selecione Criar conjunto de dados e, em seguida, selecione A partir do ficheiro local e a opção Tipo de conjunto de dados de ficheiros .

  2. Verifique se o ficheiro zipado aparece em Os Meus Conjuntos de Dados na categoria Conjuntos de Dados na árvore de componentes à esquerda.

  3. Ligue o conjunto de dados à porta de entrada Do Pacote de Scripts .

  4. Todos os ficheiros no ficheiro .zip estão disponíveis durante o tempo de execução do pipeline.

    Se o ficheiro do pacote de scripts contiver uma estrutura de diretório, a estrutura será preservada. Mas tem de alterar o código para preparar o conjunto de scripts ./Script para o caminho.

Processar dados

O exemplo seguinte mostra como dimensionar e normalizar os 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 ficheiro de .zip como entrada

Este exemplo mostra como utilizar um conjunto de dados num ficheiro .zip como entrada para o componente Executar Script R.

  1. Crie o ficheiro de dados no formato CSV e dê-lhe o nomemydatafile.csv.
  2. Crie um ficheiro .zip e adicione o ficheiro CSV ao arquivo.
  3. Carregue o ficheiro zipado para a área de trabalho do Azure Machine Learning.
  4. Ligue o conjunto de dados resultante à entrada ScriptBundle do componente Execute R Script .
  5. Utilize o seguinte código para ler os dados CSV do ficheiro zipado.
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 registos positivos num conjunto 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))
}

Transmitir objetos R entre componentes Executar Script R

Pode transmitir objetos R entre instâncias do componente Executar Script R com o mecanismo de serialização interna. Este exemplo pressupõe que pretende mover o objeto R com o nome A entre dois componentes Executar Script R.

  1. Adicione o primeiro componente Execute R Script ao pipeline. Em seguida, introduza 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 de número inteiro é feita porque a função de serialização produz dados no formato R Raw , o que o estruturador não suporta.

  2. Adicione uma segunda instância do componente Execute R Script e ligue-a à porta de saída do componente anterior.

  3. Escreva 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 R pré-instalados

Os seguintes pacotes R pré-instalados estão atualmente disponíveis:

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
acento circunflexo 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
gráficos 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
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

Passos seguintes

Veja o conjunto de componentes disponíveis para o Azure Machine Learning.