Temel olarak bir paketin görünmeyen işlevini değiştirmek istiyorum.Paket ad alanında görünmeyen bir işlevi nasıl geçersiz kılarım?
- Kullanım
assignInNamespace
: R-help üzerine yayını görebilen görünür işlevler içinmethods
üzerlerinde çağrıldığında hiçbir, Yıldız var yani fonksiyonları, benim hedefe ulaşmak nasıl iki mesajları bulundu. - kullanımı
fix
: her ikisi de verilen/görünür fonksiyonu (I ayrıca, ikinci bir yaklaşım, aşağıda örnek olarakpredict.lm
kullanım ve fonksiyonsubset.data.frame
ilk yaklaşım test) için hangi yaklaşımın da, stackoverflow
yayınına bakın Görünmeyen bir işlev için çalışmıyorlar, örneğin predict.ar
. Neden? Bir çözüm var mı? İşte
Show predict.ar değildir: kedi girerek
x <- rnorm(5)
y <- x + rnorm(5)
predict(lm(y ~ x))
# 1 2 3 4 5
# 1.0783047 1.5288031 0.3268405 0.8373520 -0.9833746
Değişim predict.lm
:
methods(predict)
[1] predict.Arima* predict.HoltWinters* predict.StructTS*
[4] predict.ar* predict.arima0* predict.glm
[7] predict.lm predict.loess* predict.mlm
[10] predict.nls* predict.poly predict.ppr*
[13] predict.prcomp* predict.princomp* predict.smooth.spline*
[16] predict.smooth.spline.fit*
predict.lm
uygula ("İlk satır, predict.lm \ n" için) işlev işlevinin başlangıcında olarak değiştirildi. (Sen editörü elle yapmak zorunda):
fix(predict.lm)
predict(lm(y ~ x))
# First line changed for predict.lm
# 1 2 3 4 5
# 1.0783047 1.5288031 0.3268405 0.8373520 -0.983374
predict.ar
uygula:
sunspot.ar <- ar(sunspot.year)
predict(sunspot.ar, n.ahead=25)
# $pred
# Time Series:
# Start = 1989
# End = 2013
deneyin predict.ar
değiştirmek için: yerine assignInNamespace
kullanmak
fix(predict.ar) #Here, an empty function body appears for me
fix("stats:::predict.ar") #Here as well
fix(stats:::predict.ar)
#Error in fix(stats:::predict.ar) : 'fix' requires a name
deneyin.
mypredict <- function (object, newdata, n.ahead = 1, se.fit = TRUE, ...)
{
cat("First line changed for predict.ar\n")
if (n.ahead < 1)
stop("'n.ahead' must be at least 1")
#Rest of body of stats:::predict.ar
}
assignInNamespace("predict.ar", mypredict, ns="stats")
predict(sunspot.ar, n.ahead=25)
# First line changed for predict.ar
# Error in predict.ar(sunspot.ar, n.ahead = 25) :
# object 'C_artoma' not found
yana (Ben sadece işlev gövdesi oldukça uzun olduğundan, sadece burada satırları kelimenin ilk göstermektedir. Editör işlevini stats:::predict.ar
kopyalanabilir ve vücudun başında hattını cat("First line changed for predict.ar\n")
eklendi unutmayın) "Predict.ar" için ilk satır değişti, aslında konsola basıldı, predict.ar değiştirilmiş olmalı. Ancak, neden 'C_artoma' nesnesi artık bulunamadı?
GÜNCELLEME: Tamam, bu çok utanç verici, ancak bu yazıyı artık silemiyorum: Yanıt zaten Richie Cotton'un cevabını sağladığım bağlantıda zaten vardı. Zamanını harcadığım için üzgünüm! Sanırım her şeyi kontrol ettim ve o zaman belli olanı göremiyorum. Birisi bunu bir cevap olarak gönderebilir ve kabul ediyorum. Tekrar özür dilerim.
fixInNamespace(predict.ar, pos="package:stats")
Tamam, (stackoverflow gerçekten bir önizleme seçeneği ve kendini downvote seçeneği ... gerekiyor) göndermeden önce doğru tekrar her bağlantıyı kontrol etmiyor için kendime oldukça kızgınım ama aslında bir veren sen olduğunu Doğru cevap, sadece benim günüm oldu. Bunun için teşekkürler! –
@Christoph_J Ücretli bir indirme hizmeti vereceğim. Eğer ilgileniyorsanız ... :) –
@ RomanLuštrik Haha, iyi biri. Bunu düşüneceğim ve ilgilenirseniz yakında bilmenizi sağlayın ;-) –