Bagaimana cara menjalankan skrip python di rstudio?

Mengkilap untuk Python. Cara Bekerja Dengan Database MySQL dan Postgres

Dario Radečić

20 Januari 2023

PyTorch. Cara Melatih dan Mengoptimalkan Neural Network dalam 10 Menit

Dario Radečić

06 Desember 2022

Cara Memvisualisasikan Jaringan Neural PyTorch – 3 Contoh dengan Python

Dario Radečić

17 November 2022

Paket retikulat menyediakan antarmuka R ke modul, kelas, dan fungsi Python. Misalnya, kode ini mengimpor modul Python library(reticulate) use_python("/usr/local/bin/python")6 dan memanggil beberapa fungsi di dalamnya

library(reticulate) os <- import("os") os$listdir(".")_

[1] ".git" ".gitignore" ".Rbuildignore" ".RData" [5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml" [9] "DESCRIPTION" "docs" "external" "index.html" [13] "index.Rmd" "inst" "issues" "LICENSE" [17] "man" "NAMESPACE" "NEWS.md" "pkgdown" [21] "R" "README.md" "reticulate.Rproj" "src" [25] "tests" "vignettes"

Fungsi dan data lain dalam modul dan kelas Python dapat diakses melalui operator library(reticulate) use_python("/usr/local/bin/python")7 (analog dengan cara Anda berinteraksi dengan daftar R, lingkungan, atau kelas referensi)

Paket retikulat kompatibel dengan semua versi Python >= 2. 7. Integrasi dengan NumPy bersifat opsional dan membutuhkan NumPy >= 1. 6

Versi Piton

Secara default, reticulate menggunakan versi Python yang ditemukan di library(reticulate) use_python("/usr/local/bin/python")8 (i. e. library(reticulate) use_python("/usr/local/bin/python")_9). Fungsi library(reticulate) use_virtualenv("myenv")0 memungkinkan Anda menentukan versi alternatif, misalnya

library(reticulate) use_python("/usr/local/bin/python")

Fungsi library(reticulate) use_virtualenv("myenv")1 dan library(reticulate) use_virtualenv("myenv")2 memungkinkan Anda menentukan versi Python di lingkungan virtual atau conda, misalnya

library(reticulate) use_virtualenv("myenv")_

Lihat artikel tentang Konfigurasi Versi Python untuk detail tambahan

Paket Piton

Anda dapat menginstal paket Python yang diperlukan menggunakan alat shell standar seperti library(reticulate) use_virtualenv("myenv")3 dan library(reticulate) use_virtualenv("myenv")4. Bergantian, reticulate menyertakan serangkaian fungsi untuk mengelola dan menginstal paket dalam lingkungan virtualenvs dan Conda. Lihat artikel tentang Menginstal Paket Python untuk detail tambahan

Ketik Konversi

Saat memanggil ke Python, tipe data R secara otomatis dikonversi ke tipe Python yang setara. Ketika nilai dikembalikan dari Python ke R mereka dikonversi kembali ke tipe R. Jenis dikonversi sebagai berikut

Single-element vectorScalarlibrary(reticulate) use_virtualenv("myenv")5, library(reticulate) use_virtualenv("myenv")6, library(reticulate) use_virtualenv("myenv")7, library(reticulate) use_virtualenv("myenv")8Multi-element vectorListlibrary(reticulate) use_virtualenv("myenv")9, difflib <- import("difflib") difflib$ndiff(foo, bar) filecmp <- import("filecmp") filecmp$cmp(dir1, dir2)0List of multiple typesTupledifflib <- import("difflib") difflib$ndiff(foo, bar) filecmp <- import("filecmp") filecmp$cmp(dir1, dir2)1Named listDictdifflib <- import("difflib") difflib$ndiff(foo, bar) filecmp <- import("filecmp") filecmp$cmp(dir1, dir2)2, difflib <- import("difflib") difflib$ndiff(foo, bar) filecmp <- import("filecmp") filecmp$cmp(dir1, dir2)3Matrix/ArrayNumPy ndarraydifflib <- import("difflib") difflib$ndiff(foo, bar) filecmp <- import("filecmp") filecmp$cmp(dir1, dir2)4Data FramePandas DataFramedifflib <- import("difflib") difflib$ndiff(foo, bar) filecmp <- import("filecmp") filecmp$cmp(dir1, dir2)5FunctionPython functiondifflib <- import("difflib") difflib$ndiff(foo, bar) filecmp <- import("filecmp") filecmp$cmp(dir1, dir2)6RawPython bytearraydifflib <- import("difflib") difflib$ndiff(foo, bar) filecmp <- import("filecmp") filecmp$cmp(dir1, dir2)7NULL, TRUE, FALSENone, True, Falsedifflib <- import("difflib") difflib$ndiff(foo, bar) filecmp <- import("filecmp") filecmp$cmp(dir1, dir2)8, library(reticulate) use_virtualenv("myenv")7, main <- import_main() builtins <- import_builtins() builtins$print('foo')0

Jika objek Python dari kelas khusus dikembalikan, maka referensi R ke objek itu dikembalikan. Anda dapat memanggil metode dan mengakses properti objek seolah-olah itu adalah turunan dari kelas referensi R

Mengimpor Modul

Fungsi main <- import_main() builtins <- import_builtins() builtins$print('foo')_1 dapat digunakan untuk mengimpor modul Python apa pun. Misalnya

difflib <- import("difflib") difflib$ndiff(foo, bar) filecmp <- import("filecmp") filecmp$cmp(dir1, dir2)

Fungsi main <- import_main() builtins <- import_builtins() builtins$print('foo')2 dan main <- import_main() builtins <- import_builtins() builtins$print('foo')3 memberi Anda akses ke modul utama tempat kode dijalankan secara default dan kumpulan fungsi Python bawaan. Misalnya

main <- import_main() builtins <- import_builtins() builtins$print('foo')

Modul utama umumnya berguna jika Anda telah mengeksekusi kode Python dari file atau string dan ingin mendapatkan akses ke hasilnya (lihat bagian di bawah untuk detail lebih lanjut)

Script Sumber

Fungsi main <- import_main() builtins <- import_builtins() builtins$print('foo')_4 akan mencari skrip Python dan membuat objek yang dibuatnya tersedia dalam lingkungan R (secara default lingkungan pemanggilan). Misalnya, pertimbangkan skrip Python berikut

Kami mengambilnya menggunakan fungsi main <- import_main() builtins <- import_builtins() builtins$print('foo')_4 dan kemudian dapat memanggil fungsi main <- import_main() builtins <- import_builtins() builtins$print('foo')6 langsung dari R

source_python('add.py') add(5, 10)

[1] 15

Kode Pelaksana

Anda dapat mengeksekusi kode Python di dalam modul utama menggunakan fungsi main <- import_main() builtins <- import_builtins() builtins$print('foo')7 dan main <- import_main() builtins <- import_builtins() builtins$print('foo')8. Anda kemudian dapat mengakses objek apa pun yang dibuat menggunakan objek ________28______9 yang diekspor oleh retikulat

library(reticulate) py_run_file("script.py") py_run_string("x = 10") # access the python main module via the 'py' object py$x

Konversi Objek

Secara default ketika objek Python dikembalikan ke R mereka dikonversi ke tipe R yang setara. Namun, jika Anda lebih suka membuat konversi dari Python ke R secara eksplisit dan berurusan dengan objek Python asli secara default, Anda dapat meneruskan source_python('add.py') add(5, 10)0 ke fungsi source_python('add.py') add(5, 10)1. Dalam hal ini konversi Python ke R akan dinonaktifkan untuk modul yang dikembalikan dari source_python('add.py') add(5, 10)1. Misalnya

# import numpy and specify no automatic Python to R conversion np <- import("numpy", convert = FALSE) # do some array manipulations with NumPy a <- np$array(c(1:4)) sum <- a$cumsum() # convert to R explicitly at the end py_to_r(sum)

Seperti diilustrasikan di atas, jika Anda memerlukan akses ke objek R di akhir perhitungan, Anda dapat memanggil fungsi source_python('add.py') add(5, 10)3 secara eksplisit

Mendapatkan bantuan

Anda dapat mencetak dokumentasi pada objek Python apa pun menggunakan fungsi source_python('add.py') add(5, 10)4. Misalnya

[1] ".git" ".gitignore" ".Rbuildignore" ".RData" [5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml" [9] "DESCRIPTION" "docs" "external" "index.html" [13] "index.Rmd" "inst" "issues" "LICENSE" [17] "man" "NAMESPACE" "NEWS.md" "pkgdown" [21] "R" "README.md" "reticulate.Rproj" "src" [25] "tests" "vignettes" 0

Daftar, Tupel, dan Kamus

Konversi otomatis tipe R ke tipe Python berfungsi dengan baik dalam banyak kasus, tetapi kadang-kadang Anda perlu lebih eksplisit di sisi R untuk memberikan Python tipe yang diharapkan

Misalnya, jika API Python memerlukan daftar dan Anda meneruskan vektor elemen R tunggal, itu akan diubah menjadi skalar Python. Untuk mengatasinya cukup gunakan fungsi R source_python('add.py') add(5, 10)5 secara eksplisit

[1] ".git" ".gitignore" ".Rbuildignore" ".RData" [5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml" [9] "DESCRIPTION" "docs" "external" "index.html" [13] "index.Rmd" "inst" "issues" "LICENSE" [17] "man" "NAMESPACE" "NEWS.md" "pkgdown" [21] "R" "README.md" "reticulate.Rproj" "src" [25] "tests" "vignettes" 1

Demikian pula, API Python mungkin memerlukan source_python('add.py') add(5, 10)6 daripada daftar. Dalam hal ini Anda dapat menggunakan fungsi source_python('add.py') add(5, 10)7

Daftar bernama R dikonversi menjadi kamus Python namun Anda juga dapat secara eksplisit membuat kamus Python menggunakan fungsi source_python('add.py') add(5, 10)8

[1] ".git" ".gitignore" ".Rbuildignore" ".RData" [5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml" [9] "DESCRIPTION" "docs" "external" "index.html" [13] "index.Rmd" "inst" "issues" "LICENSE" [17] "man" "NAMESPACE" "NEWS.md" "pkgdown" [21] "R" "README.md" "reticulate.Rproj" "src" [25] "tests" "vignettes" 2

Ini mungkin berguna jika Anda perlu meneruskan kamus yang menggunakan objek yang lebih kompleks (berlawanan dengan string) sebagai kuncinya

Jenis Numerik dan Indeks

R dan Python memiliki tipe numerik default yang berbeda. Jika Anda menulis source_python('add.py') add(5, 10)_9 di R itu dianggap sebagai angka floating point sedangkan source_python('add.py') add(5, 10)9 di Python dianggap sebagai bilangan bulat

Ini berarti bahwa ketika API Python mengharapkan bilangan bulat, Anda harus yakin untuk menggunakan akhiran [1] 151 di dalam R. Misalnya, jika fungsi [1] 152 membutuhkan bilangan bulat sebagai argumen [1] 153 Anda akan melakukan ini

Koleksi Python ditangani menggunakan indeks berbasis 0 daripada indeks berbasis 1 yang mungkin Anda kenal dari R. Jadi untuk mengatasi item pertama dari array di R Anda akan menulis

Sedangkan jika Anda memanggil metode dengan Python melalui retikulat yang menggunakan indeks, Anda akan menulis ini untuk menangani item pertama

Perhatikan penggunaan indeks berbasis 0 serta [1] 151 untuk menunjukkan t bahwa nilainya adalah bilangan bulat

Array

Matriks dan array R dikonversi secara otomatis ke dan dari array NumPy

Saat mengonversi dari R ke NumPy, larik NumPy dipetakan langsung ke memori yang mendasari larik R (tidak ada salinan yang dibuat). Dalam hal ini, larik NumPy menggunakan tata letak memori berbasis kolom yang kompatibel dengan R (i. e. Gaya Fortran daripada gaya C). Saat mengonversi dari NumPy ke R, R menerima salinan array NumPy yang dipesan kolom

Anda juga dapat mengonversi array R secara manual ke NumPy menggunakan fungsi [1] 155. Misalnya, Anda mungkin melakukan ini jika Anda perlu membuat larik NumPy dengan tata letak dalam memori gaya C daripada Fortran (untuk kinerja lebih tinggi dalam perhitungan berorientasi baris) atau jika Anda ingin mengontrol tipe data larik NumPy secara lebih eksplisit. Berikut adalah beberapa contoh penggunaan [1] 155

[1] ".git" ".gitignore" ".Rbuildignore" ".RData" [5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml" [9] "DESCRIPTION" "docs" "external" "index.html" [13] "index.Rmd" "inst" "issues" "LICENSE" [17] "man" "NAMESPACE" "NEWS.md" "pkgdown" [21] "R" "README.md" "reticulate.Rproj" "src" [25] "tests" "vignettes" _3

Penalaran tentang array yang menggunakan urutan dalam memori yang berbeda bisa jadi rumit. Artikel Arrays in R dan Python memberikan detail tambahan

Juga, selalu ingat bahwa ketika memanggil indeks array metode NumPy berbasis 0 daripada 1 dan membutuhkan akhiran [1] 151 untuk menunjukkan bahwa mereka adalah bilangan bulat

Bingkai Data

R data frames can be automatically converted to and from Pandas DataFrames. By default, columns are converted using the same rules governing R array NumPy array conversion, but a couple extensions are provided:

Array FactorCategorical VariablePOSIXtNumPy dengan dtype = [1] 158

Jika bingkai data R memiliki nama baris, Pandas DataFrame yang dihasilkan akan diindeks ulang menggunakan nama baris tersebut (dan sebaliknya). Penanganan khusus juga tersedia untuk [1] 15_9 yang terkait dengan Pandas DataFrame;

Matriks Jarang

Matriks renggang yang dibuat oleh paket Matrix R dapat dikonversi menjadi matriks Scipy CSC, dan sebaliknya. Ini sering berguna ketika Anda ingin meneruskan matriks jarang ke fungsi Python yang menerima matriks Scipy CSC untuk memanfaatkan format ini, seperti pemotongan kolom yang efisien dan produk vektor matriks cepat

Misalnya, pertama-tama kita membuat matriks jarang menggunakan library(reticulate) py_run_file("script.py") py_run_string("x = 10") # access the python main module via the 'py' object py$x0

[1] ".git" ".gitignore" ".Rbuildignore" ".RData" [5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml" [9] "DESCRIPTION" "docs" "external" "index.html" [13] "index.Rmd" "inst" "issues" "LICENSE" [17] "man" "NAMESPACE" "NEWS.md" "pkgdown" [21] "R" "README.md" "reticulate.Rproj" "src" [25] "tests" "vignettes" _4

Matriks jarang terlihat seperti ini

[1] ".git" ".gitignore" ".Rbuildignore" ".RData" [5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml" [9] "DESCRIPTION" "docs" "external" "index.html" [13] "index.Rmd" "inst" "issues" "LICENSE" [17] "man" "NAMESPACE" "NEWS.md" "pkgdown" [21] "R" "README.md" "reticulate.Rproj" "src" [25] "tests" "vignettes" 5

Mari kita ubah menjadi matriks Scipy CSC menggunakan library(reticulate) py_run_file("script.py") py_run_string("x = 10") # access the python main module via the 'py' object py$x1

[1] ".git" ".gitignore" ".Rbuildignore" ".RData" [5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml" [9] "DESCRIPTION" "docs" "external" "index.html" [13] "index.Rmd" "inst" "issues" "LICENSE" [17] "man" "NAMESPACE" "NEWS.md" "pkgdown" [21] "R" "README.md" "reticulate.Rproj" "src" [25] "tests" "vignettes" 6

Perhatikan bahwa ruas kanan berisi entri non-nol dari matriks, sedangkan ruas kiri menunjukkan lokasinya dalam matriks

Kita juga dapat menggunakan source_python('add.py') add(5, 10)3 untuk mengubah matriks CSC kembali ke representasi library(reticulate) py_run_file("script.py") py_run_string("x = 10") # access the python main module via the 'py' object py$x3 yang kemudian dapat dimanipulasi dengan mudah di R yang sama dengan matriks jarang asli yang kita buat sebelumnya menggunakan library(reticulate) py_run_file("script.py") py_run_string("x = 10") # access the python main module via the 'py' object py$x0

[1] ".git" ".gitignore" ".Rbuildignore" ".RData" [5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml" [9] "DESCRIPTION" "docs" "external" "index.html" [13] "index.Rmd" "inst" "issues" "LICENSE" [17] "man" "NAMESPACE" "NEWS.md" "pkgdown" [21] "R" "README.md" "reticulate.Rproj" "src" [25] "tests" "vignettes" 7

Dengan Konteks

Fungsi generik R library(reticulate) py_run_file("script.py") py_run_string("x = 10") # access the python main module via the 'py' object py$x5 dapat digunakan untuk berinteraksi dengan objek pengelola konteks Python (dengan Python Anda menggunakan kata kunci library(reticulate) py_run_file("script.py") py_run_string("x = 10") # access the python main module via the 'py' object py$x5 untuk melakukan hal yang sama). Misalnya

[1] ".git" ".gitignore" ".Rbuildignore" ".RData" [5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml" [9] "DESCRIPTION" "docs" "external" "index.html" [13] "index.Rmd" "inst" "issues" "LICENSE" [17] "man" "NAMESPACE" "NEWS.md" "pkgdown" [21] "R" "README.md" "reticulate.Rproj" "src" [25] "tests" "vignettes" _8

Contoh ini membuka file dan memastikannya ditutup secara otomatis di akhir blok with. Perhatikan penggunaan operator library(reticulate) py_run_file("script.py") py_run_string("x = 10") # access the python main module via the 'py' object py$x_7 untuk alias objek yang dibuat oleh manajer konteks

Iterator

Jika API Python mengembalikan iterator atau generator, Anda dapat berinteraksi dengannya menggunakan fungsi library(reticulate) py_run_file("script.py") py_run_string("x = 10") # access the python main module via the 'py' object py$x8. Fungsi library(reticulate) py_run_file("script.py") py_run_string("x = 10") # access the python main module via the 'py' object py$x_8 dapat digunakan untuk menerapkan fungsi R ke setiap item yang dihasilkan oleh iterator

Jika Anda tidak meneruskan fungsi ke # import numpy and specify no automatic Python to R conversion np <- import("numpy", convert = FALSE) # do some array manipulations with NumPy a <- np$array(c(1:4)) sum <- a$cumsum() # convert to R explicitly at the end py_to_r(sum)0 hasilnya akan dikumpulkan ke vektor R

Perhatikan bahwa # import numpy and specify no automatic Python to R conversion np <- import("numpy", convert = FALSE) # do some array manipulations with NumPy a <- np$array(c(1:4)) sum <- a$cumsum() # convert to R explicitly at the end py_to_r(sum)1 akan dikurangi nilainya oleh library(reticulate) py_run_file("script.py") py_run_string("x = 10") # access the python main module via the 'py' object py$x8

[1] ".git" ".gitignore" ".Rbuildignore" ".RData" [5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml" [9] "DESCRIPTION" "docs" "external" "index.html" [13] "index.Rmd" "inst" "issues" "LICENSE" [17] "man" "NAMESPACE" "NEWS.md" "pkgdown" [21] "R" "README.md" "reticulate.Rproj" "src" [25] "tests" "vignettes" _9

Iterasi Tingkat Elemen

Anda juga dapat melakukan iterasi berdasarkan elemen demi elemen menggunakan fungsi # import numpy and specify no automatic Python to R conversion np <- import("numpy", convert = FALSE) # do some array manipulations with NumPy a <- np$array(c(1:4)) sum <- a$cumsum() # convert to R explicitly at the end py_to_r(sum)3. Misalnya

library(reticulate) use_python("/usr/local/bin/python")0

Secara default # import numpy and specify no automatic Python to R conversion np <- import("numpy", convert = FALSE) # do some array manipulations with NumPy a <- np$array(c(1:4)) sum <- a$cumsum() # convert to R explicitly at the end py_to_r(sum)3 akan mengembalikan difflib <- import("difflib") difflib$ndiff(foo, bar) filecmp <- import("filecmp") filecmp$cmp(dir1, dir2)8 ketika iterasi selesai tetapi Anda dapat memberikan nilai # import numpy and specify no automatic Python to R conversion np <- import("numpy", convert = FALSE) # do some array manipulations with NumPy a <- np$array(c(1:4)) sum <- a$cumsum() # convert to R explicitly at the end py_to_r(sum)6 khusus yang akan dikembalikan sebagai gantinya. Misalnya

library(reticulate) use_python("/usr/local/bin/python")_1

Perhatikan bahwa beberapa iterator/generator di Python tidak terbatas. Dalam hal ini, penelepon akan memerlukan logika khusus untuk menentukan kapan harus menghentikan loop

Generator

Generator Python adalah fungsi yang mengimplementasikan protokol iterator Python. Demikian pula, fungsi retikulat # import numpy and specify no automatic Python to R conversion np <- import("numpy", convert = FALSE) # do some array manipulations with NumPy a <- np$array(c(1:4)) sum <- a$cumsum() # convert to R explicitly at the end py_to_r(sum)_7 memungkinkan Anda membuat iterator Python dari fungsi R

Di Python, generator menghasilkan nilai menggunakan kata kunci # import numpy and specify no automatic Python to R conversion np <- import("numpy", convert = FALSE) # do some array manipulations with NumPy a <- np$array(c(1:4)) sum <- a$cumsum() # convert to R explicitly at the end py_to_r(sum)8. Di R, nilai hanya dikembalikan dari fungsi. Salah satu manfaat dari kata kunci # import numpy and specify no automatic Python to R conversion np <- import("numpy", convert = FALSE) # do some array manipulations with NumPy a <- np$array(c(1:4)) sum <- a$cumsum() # convert to R explicitly at the end py_to_r(sum)8 adalah memungkinkan iterasi berturut-turut untuk menggunakan keadaan iterasi sebelumnya. Di R, ini dapat dilakukan dengan mengembalikan fungsi yang mengubah lingkungan terlampir melalui operator

Postingan terbaru

LIHAT SEMUA