Ich dachte, dass es ausreichen würde, voll qualifizierte Namen zu verwenden, um zu vermeiden, meinen Umfang mit Namen zu verschandeln, die ich nicht explizit eingeführt habe, aber anscheinend ist dies bei R nicht der Fall.R Wie schränkt man die Namen ein, die sich im Geltungsbereich befinden, auf diejenigen, die ich explizit erstelle?
Zum Beispiel
% R_PROFILE_USER= /usr/bin/R --quiet --no-save --no-restore
> ls(all = TRUE)
character(0)
> load("/home/berriz/_/projects/fda/deseq/.R/data_for_deseq.RData")
> ls(all = TRUE)
[1] "a" "b" "c"
> ?rlog
No documentation for ‘rlog’ in specified packages and libraries:
you could try ‘??rlog’
So weit, so gut. Wie der letzte Befehl zeigt, weiß der Interpreter insbesondere nichts von rlog
.
Aber nachdem ich laufen
> d <- DESeq2::DESeqDataSetFromMatrix(countData = a, colData = b, design = c)
... dann, von nun an, der Befehl ?rlog
eine Dokumentationsseite für eine Funktion erzeugen habe ich nicht explizit in die Umwelt einzuführen (und beziehen sich nicht mit einem vollständig qualifizierter Name).
Ich finde dieses Verhalten beunruhigend.
Insbesondere weiß ich nicht, wann eine Definition, die ich explizit gemacht habe, stillschweigend als Nebeneffekt eines scheinbar unzusammenhängenden Befehls beschattet wird.
Wie kann ich kontrollieren, was die Umgebung sehen kann?
Oder anders gesagt, wie kann ich Nebenwirkungen wie die oben abgebildete verhindern?
Von '\' :: \ '': „Das Paket Namespace geladen werden, wenn sie nicht vor dem Aufruf geladen wurde, aber das Paket wird nicht an den Suchpfad angebracht werden“ – alistaire
@alistaire: Danke für die Beruhigung. Das wird etwas gewöhnungsbedürftig sein ... Überall sonst bin ich auf die Idee eines Suchpfads gestoßen, das bedeutet, dass ein nicht qualifizierter Bezeichner, der nicht über den Suchpfad gefunden werden kann, nicht definiert ist, Punkt.In meinem Beispiel ist 'rlog' jedoch weder ein qualifizierter Bezeichner, noch ist er, wie Ihr Auszug zeigt, über den Suchpfad erreichbar, und der R-Interpreter behandelt ihn nicht als ungültig. – kjo
Es gibt tatsächlich ein paar Suchpfade; Die hier relevanten sind geladene Namespaces und angehängte Namespaces. Sofern keine Paketreferenz vorangestellt ist, können Sie nur Funktionen aufrufen, die sich in einem angehängten Namespace befinden. Was normalerweise geladen wird, spielt keine große Rolle. '?' Ist jedoch gierig und durchsucht alle geladenen Namespaces. '??' ist noch gieriger und durchsucht alle installierten Pakete. – alistaire