Saya ingin memeriksa apakah beberapa variabel didefinisikan dalam R - tanpa mendapatkan kesalahan. Bagaimana saya bisa melakukan ini?
Upaya saya (tidak berhasil):
> is.na(ooxx)
Error: object 'ooxx' not found
> is.finite(ooxx)
Error: object 'ooxx' not found
Terima kasih!
Lihat
?exists
, untuk beberapa definisi "... didefinisikan". Misalnyasumber
jika Anda berada di dalam suatu fungsi, missing () adalah apa yang Anda inginkan.
sumber
missing
Namun, hanya berfungsi untuk argumen fungsi. Anda tidak dapat melakukannyafoo <- function(x) {missing(x); missing(y)}
atau Anda akan mendapatkannyafoo(1)
> Error in missing(y) : 'missing' can only be used for arguments
.Seperti yang ditunjukkan orang lain, Anda sedang mencari
exists
. Perlu diingat bahwa menggunakanexists
dengan nama yang digunakan oleh paket dasar R akan mengembalikan true terlepas dari apakah Anda mendefinisikan variabel:Untuk menyiasati ini (seperti yang ditunjukkan oleh Bazz; lihat
?exists
), gunakaninherits
argumen:Tentu saja, jika Anda ingin mencari ruang nama paket terlampir, ini juga akan gagal:
Satu-satunya hal yang dapat saya pikirkan untuk mengatasi ini - untuk mencari dalam paket terlampir tetapi tidak dalam paket dasar - adalah sebagai berikut:
Bandingkan penggantian
_object_name_
dengan"data.table"
(TRUE
) vs."var"
(FALSE
)(tentu saja, jika Anda tidak menggunakan RStudio, saya pikir lingkungan yang terlampir secara otomatis adalah
"package:stats"
)sumber
inherits = FALSE
tampaknya mengisolasi hal-hal di lingkungan global. Apakah itu benar?Jika Anda tidak ingin menggunakan tanda kutip, Anda dapat menggunakan
deparse(substitute())
trik yang saya temukan di bagian contoh?substitute
:sumber
force
atau mengevaluasinya dalam fungsi seperti ini:is.defined <- function(sym) class(try(sym, TRUE))!='try-error'
Mungkin ada situasi di mana Anda tidak tahu persis nama variabel yang Anda cari, seperti ketika array hasil telah dibuat oleh sistem antrian. Ini mungkin dapat diatasi dengan "ls" dan "pola" argumennya yang mengharapkan ekspresi reguler.
Fungsi "ada" dapat diimplementasikan kembali seperti itu
Sambil mempersiapkan jawaban ini, saya sedikit terkejut tentang perlunya kebutuhan spesifikasi lingkungan ketika memanggil ls () dari dalam suatu fungsi. Jadi, terima kasih untuk itu, stackoverflow! Ada juga atribut "all.names" yang seharusnya saya atur menjadi true tetapi telah dihilangkan.
sumber