Partilhar via


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: 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 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.

Diagrama de entradas para um componente R

Os conjuntos de dados armazenados no designer são convertidos automaticamente em um quadro de dados R quando carregados com esse componente.

  1. Adicione o componente Executar Script R ao seu pipeline.

  2. 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.

  3. 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 e Param<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 e dataframe2, que é diferente do designer do Azure Machine Learning (a referência do designer como dataset1, 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.

  4. 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.

    1. Agrupe o script e outros recursos personalizados em um arquivo zip.
    2. Carregue o arquivo zip como um conjunto de dados de arquivo para o estúdio.
    3. 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.
    4. 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)))
    }
    
  5. 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.

  6. 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.

  1. 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 .

  2. Verifique se o arquivo compactado aparece em Meus Conjuntos de Dados na categoria Conjuntos de Dados na árvore de componentes à esquerda.

  3. Conecte o conjunto de dados à porta de entrada do Pacote de Scripts .

  4. 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.

  1. Crie o arquivo de dados no formato CSV e nomeie-o mydatafile.csv.
  2. Crie um arquivo .zip e adicione o arquivo CSV ao arquivo.
  3. Carregue o arquivo compactado em seu espaço de trabalho do Azure Machine Learning.
  4. Conecte o conjunto de dados resultante à entrada ScriptBundle do componente Execute R Script .
  5. 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.

  1. 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.

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

  3. 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.