ls()
(src/main/envir.c
olarak) için kaynak kodu, başka bir işlev kullanılarak geri değer tanımlar: return R_lsInternal(env, all);
;
#2518 SEXP attribute_hidden do_ls(SEXP call, SEXP op, SEXP args, SEXP rho)
#2519 {
#2520 SEXP env;
#2521 int all;
#....
#2537 return R_lsInternal(env, all);
#2538 }
dönüş fonksiyonu return R_lsInternal(env, all);
, ortamlar ve bütün isimleri almak ve line 2452 of the envir.c
tanımlanır olup olmadığını gösteren bir boolean bir listesini alır.
#2542 SEXP R_lsInternal(SEXP env, Rboolean all)
#2543 {
#2544 int k; <==== INTEGER TYPE DEFINED HERE LIMITS NUMBER OF OBJECTS IN ENVIRONMENT
#2545 SEXP ans;
#2546
#2547
#2548 /* Step 1 : Compute the Vector Size */
#2549 k = 0;
#2550 if (env == R_BaseEnv || env == R_BaseNamespace)
#2551 k += BuiltinSize(all, 0);
#...
#2562 /* Step 2 : Allocate and Fill the Result */
#2563 PROTECT(ans = allocVector(STRSXP, k));
#...
#2576 return ans;
#2577 }
: Bu nedenle bir ortamda nesnelerin sayısı, bu veri türü maksimum boyutu ile sınırlı olmalıdır, bir ortam (lar) (aşağıda
k
) bir
int
veri türü uzunluğunun depolanması için nesnelerin isimleri uzunluğunu hesaplar
Ancak, bu, belirtilen bir environment
'daki nesneler içindir. Alt ortamları belirleyememenin hiçbir sebebi yok, bunların her biri .Machine$integer.max
nesnesine sahip olabilir! Dolayısıyla sınır sadece makine belleğiniz tarafından sınırlandırılmalıdır. Bunu test etmek için birini çok isterim!
# Example of assigning values in sub environments...
e <- new.env()
e$f <- new.env()
# Environment `e` now has one object in, which is another environment...
length (ls(e))
# [1] 1
e$f$a <- 2
# Environment `f` now also has one object in, which is `a`
length (ls(e$f))
# [1] 1
Not: e
işlev envlength
length
olarak sevk edilecek bir ortam, bir iç jenerik edilir olduğu length(e)
kullanarak nesnelerin uzunluğunu hesaplamak eğer kendisi için bir tane olmak üzere çeşitli nesne türleri için yazılı çeşitli yöntemler vardır Aşağıdaki yorumlarda @RichieCotton ve @hadley tarafından belirtildiği gibi ortamlar için.
Mümkün olan en küçük nesnenin boyutuna ve kullanabileceğiniz boş bellek miktarına bağlı olmaz mı? – Jota
64-bit bir sistemde 2^53-1 olduğunu düşünüyorum. Sorunuz şu adreste yanıtlandı: http://stackoverflow.com/a/21142236/602276 – Andrie
İndeksleme tamsayı modunda yapıldığından, ancak .machine $ integer.max # [1] 2147483647''den daha fazla bir şey olmadığından şüpheleniyorum. Uygulama detaylarının dayattığı alt limiti bulmaya şaşırmayın. –