Saya mencari kebalikan dari get()
.
Diberi nama objek, saya ingin string karakter yang mewakili objek itu diekstraksi langsung dari objek.
Contoh sepele dengan foo
menjadi pengganti untuk fungsi yang saya cari.
z <- data.frame(x=1:10, y=1:10)
test <- function(a){
mean.x <- mean(a$x)
print(foo(a))
return(mean.x)}
test(z)
Akan mencetak:
"z"
Pekerjaan saya, yang lebih sulit untuk diterapkan dalam masalah saya saat ini adalah:
test <- function(a="z"){
mean.x <- mean(get(a)$x)
print(a)
return(mean.x)}
test("z")
deparse(substitute(...))
apa yang Anda cariget
dalam R adalahassign
tetapi saya tidak yakin itu yang benar-benar Anda cari ...Jawaban:
Trik deparse-subtitusi lama:
Sunting: Lari dengan objek uji baru
Catatan: ini tidak akan berhasil di dalam fungsi lokal ketika satu set item daftar diteruskan dari argumen pertama ke
lapply
(dan juga gagal ketika suatu objek diteruskan dari daftar yang diberikan kefor
-loop.) Anda akan dapat mengekstrak ".Names" -ditribusi dan urutan pemrosesan dari hasil struktur, jika itu adalah vektor bernama yang sedang diproses.sumber
Pemahaman intuitif saya Di mana kutipan membekukan var atau ekspresi dari evaluasi dan fungsi deparse yang merupakan kebalikan dari fungsi parse membuat simbol yang dibekukan kembali ke String
sumber
Perhatikan bahwa untuk metode cetak perilaku dapat berbeda.
Komentar lain yang saya lihat di forum menunjukkan bahwa perilaku terakhir tidak dapat dihindari. Sangat disayangkan jika Anda menulis metode cetak untuk paket.
sumber
print.foo=function(x){ cat(deparse(substitute(x))) }
atauprint.foo=function(x){ print(deparse(substitute(x)), quote=FALSE) }
print.foo=function(x){ print.default(as.list(x)) }