Bagaimana cara menjalankan skrip python di rstudio?

Bagaimana cara menjalankan skrip python di rstudio?

Bagaimana cara menjalankan skrip python di rstudio?

Mengkilap untuk Python. Cara Bekerja Dengan Database MySQL dan Postgres

Bagaimana cara menjalankan skrip python di rstudio?

Bagaimana cara menjalankan skrip python di rstudio?

Dario Radečić

20 Januari 2023

Bagaimana cara menjalankan skrip python di rstudio?

Bagaimana cara menjalankan skrip python di rstudio?

PyTorch. Cara Melatih dan Mengoptimalkan Neural Network dalam 10 Menit

Bagaimana cara menjalankan skrip python di rstudio?

Bagaimana cara menjalankan skrip python di rstudio?

Dario Radečić

06 Desember 2022

Bagaimana cara menjalankan skrip python di rstudio?

Bagaimana cara menjalankan skrip python di rstudio?

Cara Memvisualisasikan Jaringan Neural PyTorch – 3 Contoh dengan Python

Bagaimana cara menjalankan skrip python di rstudio?

Bagaimana cara menjalankan skrip python di rstudio?

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 vectorScalar
library(reticulate)
use_virtualenv("myenv")
5,
library(reticulate)
use_virtualenv("myenv")
6,
library(reticulate)
use_virtualenv("myenv")
7,
library(reticulate)
use_virtualenv("myenv")
8Multi-element vectorList
library(reticulate)
use_virtualenv("myenv")
9,
difflib <- import("difflib")
difflib$ndiff(foo, bar)

filecmp <- import("filecmp")
filecmp$cmp(dir1, dir2)
0List of multiple typesTuple
difflib <- import("difflib")
difflib$ndiff(foo, bar)

filecmp <- import("filecmp")
filecmp$cmp(dir1, dir2)
1Named listDict
difflib <- 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 ndarray
difflib <- import("difflib")
difflib$ndiff(foo, bar)

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

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

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

filecmp <- import("filecmp")
filecmp$cmp(dir1, dir2)
7NULL, TRUE, FALSENone, True, False
difflib <- 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] 15
1 di dalam R. Misalnya, jika fungsi
[1] 15
2 membutuhkan bilangan bulat sebagai argumen
[1] 15
3 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] 15
1 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] 15
5. 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] 15
5

 [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] 15
1 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] 15
8

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$x
0

 [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$x
1

 [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$x
3 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$x
0

 [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$x
5 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$x
5 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$x
8. 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$x
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"      
_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 <<-. Misalnya

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

Jika Anda ingin menunjukkan akhir dari iterasi, kembalikan

difflib <- import("difflib")
difflib$ndiff(foo, bar)

filecmp <- import("filecmp")
filecmp$cmp(dir1, dir2)
8 dari fungsi

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

Perhatikan bahwa Anda dapat mengubah nilai yang menunjukkan akhir iterasi menggunakan parameter

# 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 (e. g.
 [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"      
_02)

Fungsi

Tanda tangan

Secara default fungsi R dikonversi ke Python dengan tanda tangan umum (

 [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"      
03), di mana tidak ada argumen kata kunci atau nilai default untuk argumen

Misalnya, di bawah ini kami menerapkan

library(reticulate)

py_run_file("script.py")

py_run_string("x = 10")

# access the python main module via the 'py' object
py$x
_1 ke fungsi R dan kemudian kami menggunakan modul inspect Python untuk mendapatkan spesifikasi argumen fungsi yang dikonversi. Anda dapat melihat bahwa tanda tangan dari fungsi yang dibungkus terlihat berbeda dari tanda tangan fungsi R yang asli

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

Konversi default ini biasanya berfungsi dengan baik, namun beberapa pustaka Python memiliki pemeriksaan ketat pada tanda tangan fungsi dari callback yang disediakan pengguna. Dalam kasus ini, tanda tangan

 [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"      
_03 generik akan gagal dalam pemeriksaan ini

Untuk kasus ini, Anda dapat menggunakan

 [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"      
_06 untuk membungkus fungsi R sehingga fungsi yang dibungkus memiliki tanda tangan yang persis sama dengan fungsi R asli, e. g. satu argumen
 [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"      
_07 tanpa nilai default dan argumen lain
 [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"      
08 dengan nilai default 1. 5

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

Perhatikan bahwa tanda tangan fungsi R tidak boleh berisi konstruksi esoteris yang tidak kompatibel dengan Python. Misalnya, kita tidak dapat memiliki fungsi R dengan tanda tangan seperti

 [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"      
09 karena fungsi Python mengharuskan argumen tanpa nilai default muncul sebelum argumen dengan nilai default

Utas Latar Belakang

Dalam beberapa kasus, pustaka Python akan memanggil panggilan balik pada utas latar belakang Python. Karena kode R harus dijalankan di utas utama, ini tidak akan berfungsi secara default saat Anda meneruskan fungsi R sebagai panggilan balik

Untuk mengatasinya, Anda dapat menggunakan

 [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"      
_10, yang akan menyediakan pembungkus khusus untuk fungsi R Anda yang memastikannya hanya akan dipanggil di utas utama

Canggih

Ada beberapa fungsi lebih lanjut yang tersedia yang berguna terutama saat membuat antarmuka R tingkat tinggi untuk pustaka Python

Objek Python

Biasanya berinteraksi dengan objek Python dari R melibatkan penggunaan operator

library(reticulate)
use_python("/usr/local/bin/python")
7 untuk mengakses properti apa pun untuk fungsi objek yang Anda butuhkan. Saat menggunakan
library(reticulate)
use_python("/usr/local/bin/python")
_7, objek Python secara otomatis dikonversi ke persamaan R jika memungkinkan. Fungsi berikut memungkinkan Anda untuk meminta informasi tentang konfigurasi Python yang tersedia di sistem saat ini

Bagaimana cara menjalankan kode di RStudio?

Untuk mengeksekusi baris kode sumber tempat kursor berada saat ini, Anda tekan tombol Ctrl+Enter (atau gunakan tombol Jalankan bilah alat ). Setelah mengeksekusi baris kode, RStudio secara otomatis memajukan kursor ke baris berikutnya. Hal ini memungkinkan Anda untuk satu langkah melalui urutan baris.

Apakah Python berfungsi di RStudio?

RStudio Workbench adalah lingkungan yang aman, dapat diskalakan, dan terpusat yang memungkinkan kolaborasi kode R dan Python dengan menyediakan. Dukungan untuk beberapa IDE (RStudio, Jupyter Notebooks, dan VSCode) Berbagi proyek secara real-time.

Bagaimana cara saya menjalankan skrip Python?

Cara paling dasar dan mudah untuk menjalankan skrip Python adalah dengan menggunakan perintah python . Anda perlu membuka baris perintah dan mengetik kata python diikuti dengan path ke file skrip Anda seperti ini. skrip_pertama python. py Halo Dunia. Kemudian Anda menekan tombol ENTER dari keyboard, dan hanya itu.