Nasıl kontrol "global değişken" için görünür bir cilt; ggplot2 benim sözdizimi mantıklı olduğunda notlar CMD R işleyebilir miyim?
EDİT: Hadley Wickham kendimi yanlış ifade ettim dikkat çekiyor. R CMD kontrol NOTLARI, Uyarıları veriyor. Karışıklık için çok özür dilerim. Benim yanlışlık.
Kısa versiyonu
R CMD check
Bu ggplot2 sensible plot-creation syntax her kullanışımda not atar:
no visible binding for global variable [variable name]
R CMD kontrol, ama başka mantıklı sözdizimi bütün bir damar suç gibi görünüyor anlıyorum. Benim paket R CMD check
pas ve kabul almak için KURABİYELERLE almak için ne olduğundan emin değilim.
Arka plan
Sascha Epskamp daha önce essentially the same issue tarihinde gönderildi. Fark, sanırım, subset()
'says it's designed for interactive use s kılavuz.
Benim durumumda, sorun ggplot2
temel bir özelliği üzerinde subset()
değil ama: data =
argüman.
Bu notlar oluşturduğu yazdığım kod bir örnek
Burada bir arsa için puan ekler a sub-function my package:
JitteredResponsesByContrast <- function (data) {
return(
geom_point(
aes(
x = x.values,
y = y.values
),
data = data,
position = position_jitter(height = 0, width = GetDegreeOfJitter(jj))
)
)
}
R CMD check
bu kod ayrıştırma, diyecekler
granovagg.contr : JitteredResponsesByContrast: no visible binding for
global variable 'x.values'
granovagg.contr : JitteredResponsesByContrast: no visible binding for
global variable 'y.values'
Onay CMD neden haklı
Onay teknik olarak doğru. x.values
y.values
- Yerel işlevi tanımlı değil 20**
- Formu
x.values <- [something]
ya da genel olarak ön tanımlı değil ya da arayan.
Bunun yerine, daha önce tanımlanmış ve işlevi JitteredResponsesByContrast()
içine geçirilen bir dataframe içinde değişkenleri ediyorlar.
Zor R CMD yatıştırmak için yapar neden kontrol edin
ggplot2 data
bir değişken kullanımını teşvik etmek gibi görünüyor. Veri bağımsız değişkeni, muhtemelen, bu kod yürütmesine neden olur
library(ggplot2)
p <- ggplot(aes(x = hwy, y = cty), data = mpg)
p geom_point()
amabukod nesne-not-found hatası: bir üretecek
library(ggplot2)
hwy # a variable in the mpg dataset
İki aptal bir iş, neden ve ne ile mutluyum
NULLing çıkış stratejisi
Matthew Dowle recommends sorunlu değişkenleri benim durumumda bu gibi görünecektir ilk, NULL ayarı:
JitteredResponsesByContrast <- function (data) {
x.values <- y.values <- NULL # Setting the variables to NULL first
return(
geom_point(
aes(
x = x.values,
y = y.values
),
data = data,
position = position_jitter(height = 0, width = GetDegreeOfJitter(jj))
)
)
}
Bu çözüm, takdir ediyorum, ama üç nedenden dolayı sevmiyorum.
R CMD check
yatıştırıcı ötesinde ek bir amaca hizmet eder.- niyeti göstermez. Yükseltir beklentisi olan
aes()
arayacak görmek bizim artık BOŞ değişkenler (olmaz), süre engelleyen gerçek amaç (R CMD onay farkında değişkenleri görünüşe göre olmaz yoksa biliyorum bağlı) - 1 ve 2 problemleri her zaman bir komplo öğe döndüren bir fonksiyon yazmak için, kafa karıştırıcı NULLing bir açıklama eklemek zorunda çarpın
() İle strateji
with()
söz konusu değişkenler biraz daha büyük bir ortam içinde bulunabilir açıkça işaret etmek için kullanabilirsiniz. Benim durumumda, with()
kullanarak bu gibi görünüyor:
JitteredResponsesByContrast <- function (data) {
with(data, {
geom_point(
aes(
x = x.values,
y = y.values
),
data = data,
position = position_jitter(height = 0, width = GetDegreeOfJitter(jj))
)
}
)
}
Bu çözüm çalışır. Ama, bile beklenir bu şekilde olmuyor çünkü bu çözüm sevmiyorum. Eğer with()
çok değişken olduğu için tercüman işaret sorununu çözmek olsaydı, o zaman bile etmemeliyimgerekdata =
argüman. , with()
ama bu şekilde çalışmıyor:
library(ggplot2)
p <- ggplot()
p <- p with(mpg, geom_point(aes(x = hwy, y = cty)))
p # will generate an error saying `hwy` is not found
Yani, yine, bu çözüm NULLing stratejisine benzer bir kusuru var bence
- Ben hala her çizim öğesi işlevi geçmesi ve
with()
telefon mantık sarın with()
çağrı yanıltıcıdır. Ben haladata =
bir argümanınwith()
yaptığıR CMD check
yatıştırmak.
Sonuç
Gördüğüm kadarıyla, alırım üç seçenek vardır:
- Lobi" (**51) uyarınca, ve her zaman ben bir paket gönder. "sahte olduğunu savunarak notları görmezden KIZIL
- İki istenmeyen stratejileri ile benim kod (NULLing ya
with()
blok) düzeltme - Uğultu yüksek sesle ve sorun ortadan kalkar umarım gerçekten
Üç hiçbiri beni mutlu ediyor, ve insanlar ve diğer paket geliştiriciler ggplot2 dünyasına giriş yapmak isteyen kişiler) nedir merak ediyorum. Şimdiden herkese teşekkürler. Ben gerçekten bu işten bile okuma takdir :-)
CEVAP
İki çözüm var:
Kodunuz standart dışı değerlendirme önlemek için yeniden yazın. Ggplot2, bu demektir
aes()
yerineaes_string()
kullanarak Harlan tarafından açıklandığı gibi)Bir ara 44 ** bir yere üst düzey paket için ekleyin.
Eğer bir şey biraz hacky yapacaksan bile KURABİYELERLE için gönderirken paketinize 0 NOTLAR için gayret etmelisiniz. Bu hayat KURABİYELERLE için daha kolay ve sizin için daha kolay hale getirir.
(2014-12-31 bu son düşüncelerimi yansıtacak şekilde güncellendi)
Bir dize kontrol etmek için nasıl &quo...
&Quot;Visual Studio her zaman durdurma...
&Quot Geçersiz kılmak İçin Nasıl Andro...
Nasıl kullanılır "&; raylar üzeri...
Nasıl UİTableView (tableview stil&; Gr...