Di R, saya ingin mengambil daftar variabel global di akhir skrip saya dan mengulanginya. Ini kode saya
#declare a few sample variables
a<-10
b<-"Hello world"
c<-data.frame()
#get all global variables in script and iterate over them
myGlobals<-objects()
for(i in myGlobals){
print(typeof(i)) #prints 'character'
}
Masalah saya adalah itu typeof(i)
selalu kembali character
meskipun variabel a
dan c
bukan variabel karakter. Bagaimana saya bisa mendapatkan tipe variabel asli di dalam loop for?
typeof()
memberikan informasi yang sangat umum tentang bagaimana objek disimpan dalam memori. Untuk sebagian besar kasus penggunaan, jika Anda ingin mengetahui informasi yang baik tentang variabelx
, Anda akan mendapatkan informasi yang lebih berguna dariclass(x)
,is(x)
ataustr(x)
(di urutan berapa banyak detail yang mereka berikan). Lihat jawaban Eric di bawah ini untuk contoh apa yangtypeof()
memberi tahu Anda: faktor adalahinteger
; daftar, bingkai data, objek model, objek tingkat lanjut lainnya hanyalist
...Jawaban:
Anda perlu menggunakan
get
untuk mendapatkan nilai daripada nama karakter objek seperti yang dikembalikan olehls
:Atau, untuk masalah yang disajikan, Anda mungkin ingin menggunakan
eapply
:sumber
get
memiliki kritik dan saya membayangkaneapply
akan lebih cepat dari loop yang ditafsirkan. Tapi hanya ada satu cara untuk mengetahuinya ...Cara mendapatkan tipe variabel saat disembunyikan di bawah objek global:
Semua yang Anda butuhkan ada di manual R tentang tipe dasar: https://cran.r-project.org/doc/manuals/R-lang.html#Basic-types
object()
Kebutuhan Anda untuk ditembusget(...)
sebelum Anda dapat melihat ke dalam. Contoh:Bagaimana mendapatkan tipe variabel yang Anda miliki di R
R fungsi
typeof
memiliki bias untuk memberikan jenis di kedalaman maksimum, misalnya.Cara mendapatkan kelas variabel yang Anda miliki di R
R fungsi
class
memiliki bias untuk memberikan jenis wadah atau struktur encapsulating jenis Anda, misalnya.Dapatkan data
storage.mode
variabel AndaKetika variabel R ditulis ke disk, tata letak data berubah lagi, dan disebut data
storage.mode
. Fungsistorage.mode(...)
mengungkapkan informasi ini tingkat rendah: lihat Mode, Kelas, dan Jenis objek R . Anda tidak perlu khawatir tentang R's storage.mode kecuali Anda mencoba memahami penundaan yang disebabkan oleh pemaksaan / pemaksaan round trip yang terjadi saat menetapkan dan membaca data ke dan dari disk.Ideologi seputar sistem pengetikan triad R:
Sistem pengetikan bebek R memiliki ketidakpastian di dalamnya. Sebagai analogi, pertimbangkan cangkir keramik, dapat digunakan untuk menampung cairan, atau digunakan sebagai proyektil seperti bola bisbol. Tujuan dari cangkir tergantung pada sifat yang tersedia dan fungsi yang bekerja padanya. Jenis fluiditas ini memungkinkan kelonggaran yang lebih besar bagi pemrogram untuk mengarahkan semua jenis keluaran dari satu fungsi ke fungsi lain, dan R akan berusaha keras untuk mencoba membaca pikiran Anda dan melakukan sesuatu yang masuk akal.
Idenya adalah bahwa ketika programmer pemula menulis program R melalui gerakan Brownian, sebagaimana yang mereka inginkan, mereka mencoba untuk memasukkan a
googah.blimflarg
kevehicle.subspaceresponder(...)
. Alih-alih memuntahkan kesalahan jenis, program R melakukan senam untuk mengubah jenis dan kemudian melakukan sesuatu yang sangat berguna. Pemrogram pemula memposting kode di blognya dan berkata "lihat hal luar biasa yang saya lakukan dengan 3 baris kode R! Saya tidak tahu bagaimana ia tahu apa yang harus dilakukan, tetapi ternyata berhasil!"sumber
Anda dapat menggunakan class (x) untuk memeriksa tipe variabel. Jika persyaratannya adalah untuk memeriksa semua jenis variabel dari bingkai data maka sapply (x, class) dapat digunakan.
sumber
Saya mencoba
class
dantypeof
berfungsi, tetapi semuanya gagal.sumber
Dirancang untuk melakukan kebalikan dari apa yang Anda inginkan, inilah salah satu mainan toolkit saya:
sumber
lapply (your_dataframe, class) memberi Anda sesuatu seperti:
$ tikr [1] "faktor"
$ Date [1] "Date"
$ Terbuka [1] "numerik"
$ Tinggi [1] "numerik"
... dll.
sumber