gpt4 book ai didi

r - r 工作区中的最大对象数

转载 作者:行者123 更新时间:2023-12-04 09:23:45 25 4
gpt4 key购买 nike

R 工作区可能包含的对象数量(而非大小)是否有限制? length(e)的最大可能值是多少,其中 e是环境?

( length(e) 包含 e 中变量的数量;它与 length(ls(e)) 相同。)

最佳答案

ls()的源代码(在 src/main/envir.c 中)使用另一个函数定义它的返回值: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 }

返回函数 return R_lsInternal(env, all); , 接受环境列表和指示是否获取所有名称的 bool 值,定义在 line 2452 of the envir.c .它计算环境中对象名称的长度,将长度存储在 int 中。数据类型(下面的 k),因此环境中的对象数量必须受此数据类型的最大大小限制:
 #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 }

但是,这是针对指定 environment 中的对象。 .我认为没有理由不能指定子环境,每个子环境都可以有 .Machine$integer.max对象在里面!所以限制应该只受你的机器内存限制。不过,我很想有人来测试一下!
#  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

注意:如果您使用 length(e) 计算对象的长度哪里 e是一个环境然后函数 envlength将发送为 length是一种内部泛型,为各种对象类型编写了多种方法,其中一种用于环境,如上面的@RichieCotton 和下面的评论中的@hadley 所指出的。

关于r - r 工作区中的最大对象数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25841549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com