众所周知,如果列的行或行维度为1,则R会尝试将矩阵减少为向量.可以通过使用该drop=F命令来防止维度的自动删除.
但是,我目前正在编写一个大型R包,并且需要在我的代码中禁用几百次的维度丢弃,因此我必须手动查找这些位置并添加drop=F 数百次.
因此,我想知道是否有任何选项或可能通常禁用R中矩阵的维数下降?
我有一个矩阵,并寻找一种有效的方法来复制它n次(其中n是数据集中观察的数量).例如,如果我有一个矩阵A.
A <- matrix(1:15, nrow=3)
然后我想要一个表格的输出
rbind(A, A, A, ...) #n times.
显然,有许多方法来构造这样的大矩阵,例如使用for循环apply或类似的函数.然而,对"矩阵复制 - 函数"的调用发生在我的优化算法的核心,在我的程序的一次运行中它被称为数万次.因此,循环,应用类型的函数和类似的东西都不够有效.(这样的解决方案基本上意味着n上的循环执行了数万次,这显然是低效的.)我已经尝试使用普通rep函数,但还没有找到一种方法来排列rep矩阵的输出所需格式.
该解决方案
do.call("rbind", replicate(n, A, simplify=F))
效率太低,因为rbind在这种情况下经常使用.(然后,我的程序总运行时间的大约30%用于执行rbinds.)
有谁知道更好的解决方案?
我想查看R match.call函数的源代码.由于它是一个内部函数,我下载了R源代码,转到./src/main/names.c并寻找match.call那里.
因此,我发现调用了相应的.c函数do_matchcall.好的,但是如何找出./src/main/中的几十个.c文件中包含哪些功能do_matchcall?
顺便说一句,我正在使用Windows机器,以防万一.
假设我有一个外部函数,它有一个数字参数和一个函数本身的参数(内部函数).如何将外部函数的numeric参数的值作为参数传递给内部函数?考虑这个玩具示例:
innerfun <- function(M){
1:M
}
outerfun <- function(x, fun){
x * fun
}
outerfun(x = 3, fun = innerfun(M = 3)) ## works
outerfun(x = 3, fun = innerfun(M = x)) ## error because innerfun can't find 'x'
outerfun(x = 3, fun = innerfun(M = get("x"))) ## doesn't work either...
Run Code Online (Sandbox Code Playgroud)
所以我想要做的是在外部函数的参数被评估时调用innerfun,在内部函数调用中使用那些outerfun-arguments.任何想法或建议?