Ini dimaksudkan sebagai pertanyaan FAQ, jadi harap selengkap mungkin. Jawabannya adalah jawaban komunitas, jadi silakan mengedit jika Anda merasa ada yang kurang.
Saya menggunakan R dan mencoba some.function
tetapi saya mendapat pesan kesalahan berikut:
Error: could not find function "some.function"
Pertanyaan ini muncul dengan sangat teratur. Ketika Anda mendapatkan jenis kesalahan ini di R, bagaimana Anda bisa menyelesaikannya?
r
function
error-handling
r-faq
Joris Meys
sumber
sumber
R
perintah APAPUN gagal, tetapiq()
! Nasihat akan sangat dihargai!Jawaban:
Ada beberapa hal yang harus Anda periksa:
install.packages("thePackage")
(ini hanya perlu dilakukan sekali)require(thePackage)
ataulibrary(thePackage)
(ini harus dilakukan setiap kali Anda memulai sesi R baru)Jika Anda tidak yakin dalam paket mana fungsi itu berada, Anda bisa melakukan beberapa hal.
help.search("some.function")
atau??some.function
untuk mendapatkan kotak informasi yang dapat memberi tahu Anda paket mana yang berisi.find
dangetAnywhere
juga dapat digunakan untuk mencari fungsi.findFn
dalamsos
paket seperti yang dijelaskan dalam jawaban ini .RSiteSearch("some.function")
atau mencari dengan rdocumentation atau rseek adalah cara alternatif untuk menemukan fungsi.Terkadang Anda perlu menggunakan versi R yang lebih lama, tetapi jalankan kode yang dibuat untuk versi yang lebih baru. Fungsi yang baru ditambahkan (mis. HasName di R 3.4.0) tidak akan ditemukan. Jika Anda menggunakan versi R yang lebih lama dan ingin menggunakan fungsi yang lebih baru, Anda dapat menggunakan paket backports untuk membuat fungsi tersebut tersedia. Anda juga menemukan daftar fungsi yang perlu di-backport di git repo dari backports . Perlu diingat bahwa versi R yang lebih lama dari R3.0.0 tidak kompatibel dengan paket yang dibuat untuk R3.0.0 dan versi yang lebih baru.
sumber
hasName
fungsi dalamutils
. Namun, saya menggunakan 3.3.1 danhasName
tidak diperkenalkan sampai 3.4.0. Karena Anda tidak dapat memperbaruiutils
sebagai perpustakaan yang berdiri sendiri, R / R Studio mengatakan saya tidak memiliki perpustakaan untuk memperbarui.https://www.rdocumentation.org/packages/utils/versions/3.4.3/topics/hasName
atauhttps://stat.ethz.ch/R-manual/R-devel/library/utils/html/hasName.html
mengatakan "diperkenalkan di R 3.4.0" Saya akhirnya mencari tahu dengan menelusuri melalui repositori github dan melihatblame
utils / R / hasName.R dan base / R / match.RRSiteSearch("hasName")
dan mendapatkan informasi yang sama. Itu sebabnya saya menambahkan ini tahun lalu ke jawaban itu. Ini trik yang berguna untuk mengetahui ;-)Masalah lain, di hadapan NAMESPACE, adalah bahwa Anda mencoba menjalankan fungsi yang tidak diekspor dari paket foo .
Misalnya (dibuat-buat, saya tahu, tetapi):
Pertama, Anda seharusnya tidak memanggil metode S3 secara langsung, tetapi mari kita asumsikan
plot.prcomp
sebenarnya adalah beberapa fungsi internal yang berguna di paket foo . Untuk memanggil fungsi seperti itu jika Anda tahu apa yang Anda lakukan memerlukan penggunaan:::
. Anda juga perlu mengetahui namespace tempat fungsi ditemukan. MenggunakangetAnywhere()
kami menemukan bahwa fungsinya dalam statistik paket :Jadi sekarang kita dapat memanggilnya langsung menggunakan:
Saya telah menggunakan
plot.prcomp
hanya sebagai contoh untuk menggambarkan tujuannya. Dalam penggunaan normal, Anda seharusnya tidak memanggil metode S3 seperti ini. Tetapi seperti yang saya katakan, jika fungsi yang ingin Anda panggil ada (mungkin fungsi utilitas tersembunyi misalnya), tetapi dalam anamespace
, R akan melaporkan bahwa ia tidak dapat menemukan fungsi kecuali jika Anda memberi tahu namespace mana yang harus dicari. .Bandingkan ini dengan yang berikut:
stats::plot.prcomp
Yang di atas gagal karena saatstats
digunakanplot.prcomp
, itu tidak dieksporstats
sebagai kesalahan memberitahu kami:Ini didokumentasikan sebagai berikut:
sumber
could not find function "anova.lm"
... diperbaiki dengan meneleponstats:::anova.lm()
sebagai gantinya:::
telah disebut sebagai kesalahan desain dan itu::
lebih disukai. Tidak dapat dengan mudah menemukan referensi.::
dan:::
yang berbeda dan mengedit Anda tidak bekerja ! Theplot.prcomp()
Fungsi tidak diekspor dari statistik namespace sehingga Anda perlu menggunakan:::
.Saya biasanya dapat menyelesaikan masalah ini ketika komputer berada di bawah kendali saya, tetapi lebih merupakan gangguan ketika bekerja dengan grid. Ketika kotak tidak homogen, tidak semua pustaka dapat diinstal, dan pengalaman saya sering bahwa paket tidak diinstal karena ketergantungan tidak diinstal. Untuk mengatasi ini, saya memeriksa yang berikut:
.libPaths()
adalah cek yang bagus.ldd
hasil untuk R, untuk memastikan tentang perpustakaan bersamaSetelah mengalami ini cukup sedikit, beberapa langkah ini menjadi cukup rutin. Meskipun # 7 mungkin tampak seperti titik awal yang baik, ini terdaftar dalam urutan frekuensi yang saya gunakan.
sumber
Jika ini terjadi saat Anda memeriksa paket Anda (pemeriksaan R CMD), lihat NAMESPACE Anda.
Anda dapat menyelesaikan ini dengan menambahkan pernyataan berikut ke NAMESPACE:
Ini mengekspor semua yang tidak dimulai dengan titik ("."). Ini memungkinkan Anda untuk memiliki fungsi tersembunyi, dimulai dengan titik:
sumber
Saya punya kesalahan
terjadi ketika melakukan pemeriksaan R CMD dari paket yang saya buat dengan RStudio. Saya menemukan menambahkan
exportPattern (".")
ke file NAMESPACE melakukan trik. Sebagai sidenote, saya awalnya mengkonfigurasi RStudio untuk menggunakan ROxygen untuk membuat dokumentasi - dan memilih konfigurasi tempat ROxygen akan menulis file NAMESPACE saya untuk saya, yang terus menghapus suntingan saya. Jadi, dalam contoh saya, saya menghapus centang NAMESPACE dari konfigurasi Roxygen dan menambahkan exportPattern (".") Ke NAMESPACE untuk menyelesaikan kesalahan ini.
sumber
Kesalahan ini dapat terjadi bahkan jika nama fungsi valid jika beberapa argumen wajib hilang (yaitu Anda tidak memberikan cukup argumen).
Saya mendapatkan ini dalam konteks Rcpp, di mana saya menulis fungsi C ++ dengan argumen opsional, dan tidak memberikan argumen tersebut dalam R. Tampaknya argumen opsional dari C ++ dianggap wajib oleh R. Sebagai akibatnya, R tidak dapat menemukan fungsi yang cocok untuk nama yang benar tetapi jumlah argumen yang salah.
Fungsi Rcpp:
SEXP RcppFunction(arg1, arg2=0) {}
Panggilan R:
RcppFunction(0)
memunculkan kesalahanRcppFunction(0, 0)
tidaksumber
Rdocumentation.org memiliki fungsi pencarian yang sangat berguna yang - antara lain - memungkinkan Anda menemukan fungsi - dari semua paket di CRAN, serta dari paket dari Bioconductor dan GitHub.
sumber
Jika Anda menggunakan
parallelMap
Anda harus mengekspor fungsi khusus ke pekerjaan slave, jika tidak Anda mendapatkan kesalahan "tidak dapat menemukan fungsi".Jika Anda menetapkan level yang tidak hilang pada
parallelStart
argumen yang sama harus diteruskanparallelExport
, jika tidak, Anda mendapatkan kesalahan yang sama. Jadi ini harus diikuti secara ketat:sumber
Anda mungkin dapat memperbaiki kesalahan ini dengan spasi nama :: panggilan fungsi
untuk
sumber
Saya mendapat kesalahan yang sama, saya menjalankan versi .99xxx, saya memeriksa pembaruan dari menu bantuan dan memperbarui RStudio saya ke 1.0x, kemudian kesalahan tidak datang
Solusi yang sangat sederhana, cukup perbarui R Studio Anda
sumber