2014-09-19 17 views
9

küresel çevre Adını R_GlobalEnvÇevreye nasıl bir ad uygulayabilirim?

var gibi görünüyor
environment() 
# <environment: R_GlobalEnv> 

ben myEnv Adını eğer öyleyse, o

e 
# <environment: myEnv> 

okuması yeni bir çevreye e bir isim iliştirmek istiyorum Fakat bu mümkün görünmüyor. Buna izin veren new.env numaralı argüman yoktur ve attr<- çalışmaz gibi görünmüyor.

e <- new.env() 
attr(e, "names") <- "myEnv" 
# Error in attr(e, "names") <- "myEnv" : names() applied to a non-vector 

Çevreyi adlandırmak, bayt kodunu korumak ve yukarıda gösterildiği gibi yazdırmak mümkün mü? ?environment itibaren

cevap

16

: paketi ve ad ortamları ve tarafından üretilenler ‘) (attach’ yapmak gibi küresel tabanı ve boş ortamlar olarak

Sistem ortamlarında, isimler var. Diğer ortamları ' 'adı'' özelliği Dolayısıyla

vererek adlandırılabilir: ortamları (r66641 itibariyle ./src/main/printutils.c) yazdırmak için kullanılan kod göre

attr(e, "name") <- "yip" 
e 
#<environment: 0x00000000080974f8> 
#attr(,"name") 
#[1] "yip" 
environmentName(e) 
#[1] "yip" 
5

, sen alamayan

:

> e 
<environment: myEnv> 

İşte printutils.c ilgili bölümü var: gibi yazdırmak

attribute_hidden 
const char *EncodeEnvironment(SEXP x) 
{ 
    const void *vmax = vmaxget(); 
    static char ch[1000]; 
    if (x == R_GlobalEnv) 
    sprintf(ch, "<environment: R_GlobalEnv>"); 
    else if (x == R_BaseEnv) 
    sprintf(ch, "<environment: base>"); 
    else if (x == R_EmptyEnv) 
    sprintf(ch, "<environment: R_EmptyEnv>"); 
    else if (R_IsPackageEnv(x)) 
    snprintf(ch, 1000, "<environment: %s>", 
     translateChar(STRING_ELT(R_PackageEnvName(x), 0))); 
    else if (R_IsNamespaceEnv(x)) 
    snprintf(ch, 1000, "<environment: namespace:%s>", 
     translateChar(STRING_ELT(R_NamespaceEnvSpec(x), 0))); 
    else snprintf(ch, 1000, "<environment: %p>", (void *)x); 

    vmaxset(vmax); 
    return ch; 
} 
6

Sen

> e <- new.env() 
> class(e) <- "myClass" 
> print.myClass <- function(x, ...) cat("<environment: myEnv>\n") 
> e 
<environment: myEnv> 

benimki ile @ thelatemail cevabını birleştiren bir S3 print yöntemi bir sınıf verip yazabilirsiniz ... Bu

e <- new.env() 
print.myClass <- function(x, ...) cat("<environment: ", environmentName(x), ">\n", sep="") 
class(e) <- "myClass" 
e 
#<environment: > 
attr(e, "name") <- "myEnv" 
e 
#<environment: myEnv> 
yapabilirdi
İlgili konular