Definiowanie niestandardowych modułów języka R dla usługi Machine Learning Studio (wersja klasyczna)

DOTYCZY: Dotyczy.Machine Learning Studio (wersja klasyczna) Nie dotyczy.Azure Machine Learning

Ważne

Obsługa programu Machine Learning Studio (wersja klasyczna) zakończy się 31 sierpnia 2024 r. Zalecamy przejście do usługi Azure Machine Learning przed tym terminem.

Od 1 grudnia 2021 r. nie będzie można tworzyć nowych zasobów programu Machine Learning Studio (wersja klasyczna). Do 31 sierpnia 2024 r. można będzie nadal korzystać z istniejących zasobów programu Machine Learning Studio (wersja klasyczna).

Dokumentacja programu ML Studio (wersja klasyczna) jest wycofywana i może nie być aktualizowana w przyszłości.

W tym temacie opisano sposób tworzenia i wdrażania niestandardowego programu R Studio (klasycznego). W tym artykule wyjaśniono, czym są niestandardowe moduły języka R i jakie pliki są używane do ich definiowania. Ilustruje on sposób konstruowania plików, które definiują moduł i jak zarejestrować moduł do wdrożenia w obszarze roboczym usługi Machine Learning. Elementy i atrybuty używane w definicji modułu niestandardowego są następnie bardziej szczegółowo opisane. Omówiono również sposób korzystania z funkcji pomocniczych i plików oraz wielu danych wyjściowych.

Moduł niestandardowy to moduł zdefiniowany przez użytkownika, który można przekazać do obszaru roboczego i wykonać w ramach eksperymentu usługi Machine Learning Studio (klasycznego). Niestandardowy moduł języka R to niestandardowy moduł, który wykonuje funkcję języka R zdefiniowaną przez użytkownika. R to język programowania do obliczeń statystycznych i grafiki, który jest powszechnie używany przez statystyków i analityków danych do implementowania algorytmów. Obecnie język R jest jedynym językiem obsługiwanym w modułach niestandardowych, ale obsługa dodatkowych języków jest zaplanowana na przyszłe wersje.

Moduły niestandardowe mają stan pierwszej klasy w usłudze Machine Learning Studio (wersja klasyczna) w tym sensie, że mogą być używane tak samo jak w przypadku każdego innego modułu. Można je wykonywać z innymi modułami, zawartymi w opublikowanych eksperymentach lub w wizualizacjach. Masz kontrolę nad algorytmem implementowany przez moduł, porty wejściowe i wyjściowe, które mają być używane, parametry modelowania i inne różne zachowania środowiska uruchomieniowego. Eksperyment zawierający moduły niestandardowe można również opublikować w galerii sztucznej inteligencji platformy Azure w celu łatwego udostępniania.

Pliki w niestandardowym module języka R

Niestandardowy moduł języka R jest definiowany przez plik .zip zawierający co najmniej dwa pliki:

  • Plik źródłowy implementujący funkcję języka R uwidacznianą przez moduł
  • Plik definicji XML opisujący interfejs modułu niestandardowego

Dodatkowe pliki pomocnicze można również uwzględnić w pliku .zip, który zapewnia funkcje, do których można uzyskać dostęp z modułu niestandardowego. Ta opcja jest omówiona w części Argumenty sekcji odwołania Elementy w pliku definicji XML, postępując zgodnie z przykładem przewodnika Szybki start.

Przykład szybkiego startu: definiowanie, pakowanie i rejestrowanie niestandardowego modułu języka R

W tym przykładzie pokazano, jak skonstruować pliki wymagane przez niestandardowy moduł języka R, spakować je do pliku zip, a następnie zarejestrować moduł w obszarze roboczym usługi Machine Learning. Przykładowy pakiet zip i przykładowe pliki można pobrać z pliku Pobierz CustomAddRows.zip.

Plik źródłowy

Rozważmy przykład modułu Dodawanie wierszy niestandardowych, który modyfikuje standardową implementację modułu Dodawanie wierszy używanego do łączenia wierszy (obserwacji) z dwóch zestawów danych (ramek danych). Standardowy moduł Dodawanie wierszy dołącza wiersze drugiego wejściowego zestawu danych na końcu pierwszego wejściowego zestawu danych przy użyciu algorytmu rbind . Dostosowana CustomAddRows funkcja podobnie akceptuje dwa zestawy danych, ale także akceptuje parametr zamiany logicznej jako dodatkowe dane wejściowe. Jeśli parametr zamiany ma wartość FALSE, zwraca ten sam zestaw danych co implementacja standardowa. Jeśli jednak parametr zamiany ma wartość TRUE, funkcja dołącza wiersze pierwszego wejściowego zestawu danych na końcu drugiego zestawu danych. Plik CustomAddRows.R zawierający implementację funkcji języka R CustomAddRows uwidocznionej przez moduł Custom Add Rows (Dodawanie wierszy niestandardowych) ma następujący kod języka R.

CustomAddRows <- function(dataset1, dataset2, swap=FALSE) 
{
    if (swap)
    {
        return (rbind(dataset2, dataset1));
    }
    else
    {
        return (rbind(dataset1, dataset2));
    } 
} 

Plik definicji XML

Aby uwidocznić tę CustomAddRows funkcję jako moduł Machine Learning Studio (wersja klasyczna), należy utworzyć plik definicji XML, aby określić sposób działania modułu Dodawanie wierszy niestandardowych.

<!-- Defined a module using an R Script -->
<Module name="Custom Add Rows">
    <Owner>Microsoft Corporation</Owner>
    <Description>Appends one dataset to another. Dataset 2 is concatenated to Dataset 1 when Swap is FALSE, and vice versa when Swap is TRUE.</Description>

<!-- Specify the base language, script file and R function to use for this module. -->        
    <Language name="R" 
        sourceFile="CustomAddRows.R" 
        entryPoint="CustomAddRows" />  

<!-- Define module input and output ports -->
<!-- Note: The values of the id attributes in the Input and Arg elements must match the parameter names in the R Function CustomAddRows defined in CustomAddRows.R. -->
    <Ports>
        <Input id="dataset1" name="Dataset 1" type="DataTable">
            <Description>First input dataset</Description>
        </Input>
        <Input id="dataset2" name="Dataset 2" type="DataTable">
            <Description>Second input dataset</Description>
        </Input>
        <Output id="dataset" name="Dataset" type="DataTable">
            <Description>The combined dataset</Description>
        </Output>
    </Ports>

<!-- Define module parameters -->
    <Arguments>
        <Arg id="swap" name="Swap" type="bool" >
            <Description>Swap input datasets.</Description>
        </Arg>
    </Arguments>
</Module>

Należy pamiętać, że wartość atrybutów id elementów Input i Arg w pliku XML musi być zgodna z nazwami parametrów funkcji kodu języka R w pliku CustomAddRows.R DOKŁADNIE: (dataset1, dataset2 i swap w przykładzie). Podobnie wartość atrybutu entryPoint elementu Language musi być zgodna z nazwą funkcji w skrypcie języka R DOKŁADNIE: (CustomAddRows w przykładzie).

Natomiast atrybut id elementu Output nie odpowiada żadnym zmiennym skryptowi języka R. Jeśli wymagane jest więcej niż jedno dane wyjściowe, po prostu zwróć listę z funkcji języka R z wynikami umieszczonymi w tej samej kolejności co elementy Outputs są deklarowane w pliku XML.

Pakowanie i rejestrowanie modułu

Zapisz te dwa pliki jako CustomAddRows.R i CustomAddRows.xml , a następnie spakuj te dwa pliki razem w plik CustomAddRows.zip .

Aby zarejestrować je w obszarze roboczym usługi Machine Learning, przejdź do obszaru roboczego w usłudze Machine Learning Studio (wersja klasyczna), kliknij przycisk +NOWY u dołu i wybierz pozycję MODUŁ —> Z PAKIETU ZIP, aby przekazać nowy moduł Dodawanie wierszy niestandardowych.

Przekaż plik Zip

Moduł Dodawanie wierszy niestandardowych jest teraz gotowy do uzyskania dostępu przez eksperymenty usługi Machine Learning.

Elementy w pliku definicji XML

Elementy modułu

Element Module służy do definiowania modułu niestandardowego w pliku XML. Wiele modułów można zdefiniować w jednym pliku XML przy użyciu wielu elementów modułu . Każdy moduł w obszarze roboczym musi mieć unikatową nazwę. Zarejestruj moduł niestandardowy o takiej samej nazwie jak istniejący moduł niestandardowy i zastąpi istniejący moduł nowym modułem. Moduły niestandardowe można jednak zarejestrować przy użyciu tej samej nazwy co istniejący moduł Machine Learning Studio (wersja klasyczna). Jeśli tak, są one wyświetlane w kategorii Niestandardowe palety modułów.

<Module name="Custom Add Rows" isDeterministic="false"> 
    <Owner>Microsoft Corporation</Owner>
    <Description>Appends one dataset to another...</Description>/> 

W elemecie Module można określić dwa dodatkowe elementy opcjonalne:

  • element Owner, który jest osadzony w module
  • Element Opis zawierający tekst wyświetlany w szybkiej pomocy dla modułu i po umieszczeniu wskaźnika myszy na module w interfejsie użytkownika usługi Machine Learning.

Reguły dotyczące limitów znaków w elementach modułu:

  • Wartość atrybutu name w elemecie Module nie może przekraczać 64 znaków.
  • Zawartość elementu Description nie może przekraczać 128 znaków.
  • Zawartość elementu Owner nie może przekraczać 32 znaków.

Wyniki modułu mogą być deterministyczne lub nieokreślone.** Domyślnie wszystkie moduły są uważane za deterministyczne. Oznacza to, że biorąc pod uwagę niezmienny zestaw parametrów wejściowych i danych, moduł powinien zwrócić te same wyniki eacRAND lub czas działania funkcji. Biorąc pod uwagę to zachowanie, usługa Machine Learning Studio (wersja klasyczna) uruchamia ponownie moduły oznaczone jako deterministyczne, jeśli parametr lub dane wejściowe uległy zmianie. Zwracanie buforowanych wyników zapewnia również znacznie szybsze wykonywanie eksperymentów.

Istnieją funkcje nieokreślone, takie jak RAND lub funkcja zwracająca bieżącą datę lub godzinę. Jeśli moduł używa funkcji niedeterministycznej, możesz określić, że moduł nie jest deterministyczny, ustawiając opcjonalny atrybut isDeterministic na FALSE. Zapewnia to ponowne uruchomienie modułu przy każdym uruchomieniu eksperymentu, nawet jeśli dane wejściowe i parametry modułu nie uległy zmianie.

Definicja języka

Element Language w pliku definicji XML służy do określania niestandardowego języka modułu. Obecnie język R jest jedynym obsługiwanym językiem. Wartość atrybutu sourceFile musi być nazwą pliku języka R, który zawiera funkcję do wywołania podczas uruchamiania modułu. Ten plik musi być częścią pakietu zip. Wartość atrybutu entryPoint jest nazwą wywoływanej funkcji i musi być zgodna z prawidłową funkcją zdefiniowaną w pliku źródłowym.

<Language name="R" sourceFile="CustomAddRows.R" entryPoint="CustomAddRows" />

Porty

Porty wejściowe i wyjściowe dla modułu niestandardowego są określone w elementach podrzędnych sekcji Porty pliku definicji XML. Kolejność tych elementów określa układ doświadczony (UX) przez użytkowników. Pierwsze podrzędne dane wejściowe lub wyjściowe wymienione w elemecie Ports pliku XML staje się najbardziej lewym portem wejściowym w środowisku użytkownika usługi Machine Learning. Każdy port wejściowy i wyjściowy może mieć opcjonalny element podrzędny Opis , który określa tekst wyświetlany po umieszczeniu kursora myszy na porcie w interfejsie użytkownika usługi Machine Learning.

Reguły portów:

  • Maksymalna liczba portów wejściowych i wyjściowych wynosi 8 dla każdego.

Elementy wejściowe

Porty wejściowe umożliwiają przekazywanie danych do funkcji języka R i obszaru roboczego. Typy danych obsługiwane dla portów wejściowych są następujące:

DataTable: ten typ jest przekazywany do funkcji języka R jako data.frame. W rzeczywistości wszystkie typy (na przykład pliki CSV lub pliki ARFF), które są obsługiwane przez usługę Machine Learning i które są zgodne z tabelą DataTable , są automatycznie konwertowane na element data.frame.

<Input id="dataset1" name="Input 1" type="DataTable" isOptional="false">
    <Description>Input Dataset 1</Description>
</Input>

Atrybut id skojarzony z każdym portem wejściowym DataTable musi mieć unikatową wartość, a ta wartość musi być zgodna z odpowiadającym mu parametrem nazwanym w funkcji języka R. Opcjonalne porty DataTable , które nie są przekazywane jako dane wejściowe w eksperymencie, mają wartość NULL przekazaną do funkcji języka R, a opcjonalne porty zip są ignorowane, jeśli dane wejściowe nie są połączone. Atrybut isOptional jest opcjonalny zarówno dla typów DataTable , jak i Zip i jest domyślnie fałszywy .

Zip: Moduły niestandardowe mogą akceptować plik zip jako dane wejściowe. Te dane wejściowe są rozpakowane w katalogu roboczym języka R funkcji

<Input id="zippedData" name="Zip Input" type="Zip" IsOptional="false">
    <Description>Zip files to be extracted to the R working directory.</Description>
</Input>

W przypadku niestandardowych modułów języka R identyfikator portu zip nie musi być zgodny z żadnymi parametrami funkcji języka R. Dzieje się tak, ponieważ plik zip jest automatycznie wyodrębniany do katalogu roboczego języka R.

Reguły wejściowe:

  • Wartość atrybutu id elementu Input musi być prawidłową nazwą zmiennej języka R.
  • Wartość atrybutu id elementu Input nie może być dłuższa niż 64 znaki.
  • Wartość atrybutu name elementu Input nie może być dłuższa niż 64 znaki.
  • Zawartość elementu Description nie może być dłuższa niż 128 znaków
  • Wartość atrybutu type elementu Input musi być zip lub DataTable.
  • Wartość atrybutu isOptional elementu wejściowego nie jest wymagana (i jest domyślnie fałsz, jeśli nie zostanie określony), ale jeśli jest określony, musi być true lub false.

Elementy wyjściowe

Standardowe porty wyjściowe: porty wyjściowe są mapowane na wartości zwracane z funkcji języka R, które mogą być następnie używane przez kolejne moduły. DataTable jest obecnie jedynym standardowym typem portu wyjściowego. (Obsługa Osoby uczące się i przekształcenia zbliżają się. Dane wyjściowe tabeli DataTable są definiowane jako:

<Output id="dataset" name="Dataset" type="DataTable">
    <Description>Combined dataset</Description>
</Output>

W przypadku danych wyjściowych w niestandardowych modułach języka R wartość atrybutu id nie musi odpowiadać elementom skryptu języka R, ale musi być unikatowa. W przypadku danych wyjściowych pojedynczego modułu wartość zwracana z funkcji języka R musi być ramką data.frame. Aby uzyskać więcej niż jeden obiekt obsługiwanego typu danych, należy określić odpowiednie porty wyjściowe w pliku definicji XML, a obiekty muszą zostać zwrócone jako lista. Obiekty wyjściowe są przypisywane do portów wyjściowych od lewej do prawej, odzwierciedlając kolejność umieszczania obiektów na zwracanej liście.

Jeśli na przykład chcesz zmodyfikować moduł Dodawanie wierszy niestandardowych w celu wyprowadzenia oryginalnych dwóch zestawów danych, zestawu danych1 i zestawu danych2, oprócz nowego dołączonego zestawu danych, zestawu danych (w kolejności od lewej do prawej, jako: dataset, dataset1, dataset2), zdefiniuj porty wyjściowe w pliku CustomAddRows.xml w następujący sposób:

<Ports> 
    <Output id="dataset" name="Dataset Out" type="DataTable"> 
        <Description>New Dataset</Description> 
    </Output> 
    <Output id="dataset1_out" name="Dataset 1 Out" type="DataTable"> 
        <Description>First Dataset</Description> 
    </Output> 
    <Output id="dataset2_out" name="Dataset 2 Out" type="DataTable"> 
        <Description>Second Dataset</Description> 
    </Output> 
    <Input id="dataset1" name="Dataset 1" type="DataTable"> 
        <Description>First Input Table</Description>
    </Input> 
    <Input id="dataset2" name="Dataset 2" type="DataTable"> 
        <Description>Second Input Table</Description> 
    </Input> 
</Ports> 

I zwróć listę obiektów na liście w prawidłowej kolejności w ciągu "CustomAddRows.R":

CustomAddRows <- function(dataset1, dataset2, swap=FALSE) { 
    if (swap) { dataset <- rbind(dataset2, dataset1)) } 
    else { dataset <- rbind(dataset1, dataset2)) 
    } 
    return (list(dataset, dataset1, dataset2)) 
} 

Dane wyjściowe wizualizacji: możesz również określić port wyjściowy typu Wizualizacja, który wyświetla dane wyjściowe z urządzenia graficznego języka R i danych wyjściowych konsoli. Ten port nie jest częścią danych wyjściowych funkcji języka R i nie zakłóca kolejności innych typów portów wyjściowych. Aby dodać port wizualizacji do modułów niestandardowych, dodaj element Output z wartością Wizualizacja dla atrybutu typu:

<Output id="deviceOutput" name="View Port" type="Visualization">
    <Description>View the R console graphics device output.</Description>
</Output>

Reguły wyjściowe:

  • Wartość atrybutu id elementu Output musi być prawidłową nazwą zmiennej języka R.
  • Wartość atrybutu id elementu Output nie może być dłuższa niż 32 znaki.
  • Wartość atrybutu name elementu Output nie może być dłuższa niż 64 znaki.
  • Wartość atrybutu type elementu Output musi być Wizualizacja.

Argumenty

Dodatkowe dane można przekazać do funkcji języka R za pośrednictwem parametrów modułu zdefiniowanych w elemecie Arguments . Te parametry są wyświetlane w okienku właściwości po prawej stronie interfejsu użytkownika usługi Machine Learning po wybraniu modułu. Argumenty mogą być dowolnymi obsługiwanymi typami lub w razie potrzeby utworzyć niestandardowe wyliczenie. Podobnie jak w przypadku elementów Porty , elementy Argumenty mogą mieć opcjonalny element Opis , który określa tekst wyświetlany po umieszczeniu wskaźnika myszy na nazwie parametru. Opcjonalne właściwości modułu, takie jak defaultValue, minValue i maxValue, można dodać do dowolnego argumentu jako atrybuty do elementu Properties . Prawidłowe właściwości elementu Properties zależą od typu argumentu i są opisane z obsługiwanymi typami argumentów w następnej sekcji. Argumenty z właściwością isOptional ustawioną na wartość "true" nie wymagają od użytkownika wprowadzenia wartości. Jeśli wartość nie zostanie podana do argumentu, argument nie zostanie przekazany do funkcji punktu wejścia. Argumenty funkcji punktu wejścia, które są opcjonalne, muszą być jawnie obsługiwane przez funkcję, np. przypisano domyślną wartość NULL w definicji funkcji punktu wejścia. Opcjonalny argument będzie wymuszać tylko inne ograniczenia argumentów, tj. minimalne lub maksymalne, jeśli wartość jest dostarczana przez użytkownika. Podobnie jak w przypadku danych wejściowych i wyjściowych, ważne jest, aby każdy z parametrów miał skojarzone unikatowe wartości identyfikatorów. W naszym przykładzie szybkiego startu został zamieniony skojarzony identyfikator/parametr.

Element Arg

Parametr modułu jest definiowany przy użyciu elementu podrzędnego Arg sekcji Argumenty pliku definicji XML. Podobnie jak w przypadku elementów podrzędnych w sekcji Porty kolejność parametrów w sekcji Argumenty definiuje układ napotkany w środowisku użytkownika. Parametry są wyświetlane od góry w dół w interfejsie użytkownika w tej samej kolejności, w której są zdefiniowane w pliku XML. Typy obsługiwane przez usługę Machine Learning dla parametrów są wymienione tutaj.

int — parametr typu Liczba całkowita (32-bitowa).

<Arg id="intValue1" name="Int Param" type="int">
    <Properties min="0" max="100" default="0" />
    <Description>Integer Parameter</Description>
</Arg>
  • Właściwości opcjonalne: minimalna, maksymalna, domyślna i isOptional

double — parametr typu podwójnego.

<Arg id="doubleValue1" name="Double Param" type="double">
    <Properties min="0.000" max="0.999" default="0.3" />
    <Description>Double Parameter</Description>
</Arg>
  • Właściwości opcjonalne: minimalna, maksymalna, domyślna i isOptional

bool — parametr logiczny reprezentowany przez pole wyboru w środowisku użytkownika.

<Arg id="boolValue1" name="Boolean Param" type="bool">
    <Properties default="true" />
    <Description>Boolean Parameter</Description>
</Arg>
  • Opcjonalne właściwości: wartość domyślna — fałsz, jeśli nie zostanie ustawiona

ciąg: ciąg standardowy

<Arg id="stringValue1" name="My string Param" type="string">
    <Properties isOptional="true" />
    <Description>String Parameter 1</Description>
</Arg>    
  • Właściwości opcjonalne: domyślne i isOptional

ColumnPicker: parametr wyboru kolumny. Ten typ jest renderowany w środowisku użytkownika jako wybór kolumn. Element Property służy tutaj do określania identyfikatora portu, z którego wybrano kolumny, gdzie docelowy typ portu musi być DataTable. Wynik zaznaczenia kolumny jest przekazywany do funkcji języka R jako listy ciągów zawierających wybrane nazwy kolumn.

<Arg id="colset" name="Column set" type="ColumnPicker">      
    <Properties portId="datasetIn1" allowedTypes="Numeric" default="NumericAll"/>
    <Description>Column set</Description>
</Arg>
  • Wymagane właściwości: portId — pasuje do identyfikatora elementu wejściowego z typem DataTable.

  • Właściwości opcjonalne:

    • allowedTypes — filtruje typy kolumn, z których można wybrać. Prawidłowe wartości to:

      • Liczbowe
      • Wartość logiczna
      • Podzielone na kategorie
      • String
      • Etykieta
      • Funkcja
      • Wynik
      • wszystkie
    • default — prawidłowe opcje domyślne selektora kolumn obejmują:

      • Brak
      • NumericFeature
      • NumericLabel
      • NumericScore
      • Liczbowewszystkie
      • Wartość logicznaFeature
      • Wartość logicznaLabel
      • Wartość logiczna
      • Wartość logicznaWszystkie
      • KategorialneFeature
      • Etykieta kategorii
      • Kategorialny wynik
      • KategorialnyWszystkie
      • StringFeature
      • StringLabel
      • StringScore
      • StringAll
      • AllLabel
      • AllFeature
      • AllScore
      • wszystkie

Lista rozwijana: lista wyliczona (lista rozwijana) określona przez użytkownika. Elementy listy rozwijanej są określone w elemencie Properties przy użyciu elementu Item . Identyfikator każdego elementu musi być unikatowy i prawidłową zmienną języka R. Wartość nazwy elementu służy zarówno jako tekst wyświetlany, jak i wartość przekazywana do funkcji języka R.

<Arg id="color" name="Color" type="DropDown">
    <Properties default="red">
        <Item id="red" name="Red Value"/>
        <Item id="green" name="Green Value"/>
        <Item id="blue" name="Blue Value"/>
    </Properties>
    <Description>Select a color.</Description>
</Arg>    
  • Właściwości opcjonalne:
    • default — wartość właściwości domyślnej musi odpowiadać wartości identyfikatora z jednego z elementów Item .

Pliki pomocnicze

Każdy plik umieszczony w niestandardowym pliku ZIP modułu będzie dostępny do użycia w czasie wykonywania. Wszystkie obecne struktury katalogów są zachowywane. Oznacza to, że określanie źródła plików działa w tym samym środowisku lokalnym i w wykonaniu usługi Machine Learning Studio (wersja klasyczna).

Uwaga

Zwróć uwagę, że wszystkie pliki są wyodrębniane do katalogu "src", więc wszystkie ścieżki powinny mieć prefiks "src/".

Załóżmy na przykład, że chcesz usunąć wszystkie wiersze z NAs z zestawu danych, a także usunąć zduplikowane wiersze przed wyprowadzeniem ich do elementu CustomAddRows, a w pliku RemoveDupNARows.R została już napisana funkcja języka R:

RemoveDupNARows <- function(dataFrame) {
    #Remove Duplicate Rows:
    dataFrame <- unique(dataFrame)
    #Remove Rows with NAs:
    finalDataFrame <- dataFrame[complete.cases(dataFrame),]
    return(finalDataFrame)
}

Plik pomocniczy RemoveDupNARows.R można uzyskać w funkcji CustomAddRows:

CustomAddRows <- function(dataset1, dataset2, swap=FALSE) {
    source("src/RemoveDupNARows.R")
        if (swap) { 
            dataset <- rbind(dataset2, dataset1))
        } else { 
            dataset <- rbind(dataset1, dataset2)) 
        } 
    dataset <- removeDupNARows(dataset)
    return (dataset)
}

Następnie przekaż plik zip zawierający "CustomAddRows.R", "CustomAddRows.xml" i "RemoveDupNARows.R" jako niestandardowy moduł języka R.

Środowisko wykonywania

Środowisko wykonywania skryptu języka R używa tej samej wersji języka R co moduł Execute R Script (Wykonywanie skryptu języka R) i może używać tych samych pakietów domyślnych. Możesz również dodać dodatkowe pakiety języka R do modułu niestandardowego, dołączając je do niestandardowego pakietu zip modułu. Wystarczy załadować je w skryscie języka R, tak jak w swoim środowisku języka R.

Ograniczenia środowiska wykonawczego obejmują:

  • Nietrwały system plików: pliki zapisywane, gdy moduł niestandardowy jest uruchamiany, nie są utrwalane w wielu uruchomieniach tego samego modułu.
  • Brak dostępu do sieci