在"什么是最有用的R技巧?" (这里),我读到使用环境给出"传递参考功能".这种方法有任何限制和/或陷阱吗?
另外,一般来说,使用创建环境的优缺点是什么?这是我一直困惑的事情,所以任何清晰度或参考对我都非常有帮助.
先感谢您.
作为玩具示例,假设我们有一个名为'my_func'的函数(代码在下面),它带有两个参数'n'和'p'.我们的函数'my_func'将生成一个带有'n'行和'p'列的随机矩阵'x',并在运行时和内存使用中做一些昂贵的事情,比如计算'x'的奇异值之和.(当然,这个功能是一个单行,但我在这里为了可读性而拍摄.)
my_func <- function(n, p) {
x <- replicate(p, rnorm(n))
sum(svd(x)$d)
}
Run Code Online (Sandbox Code Playgroud)
如果我们希望为'n'的几个值计算'my_func',并且对于'n'的每个值,我们有几个'p'值,然后向量化函数然后将组合应用到'my_func'是很简单的:
n <- 10 * seq_len(5)
p <- 100 * seq_len(10)
grid <- expand.grid(n = n, p = p)
my_func <- Vectorize(my_func)
set.seed(42)
do.call(my_func, grid)
[1] 98.61785 195.50822 292.21575 376.79186 468.13570 145.18359
[7] 280.67456 421.03196 557.87138 687.75040 168.42994 340.42452
[13] 509.65528 683.69883 851.29063 199.08474 400.25584 595.18311
[19] 784.21508 982.34591 220.73215 448.23698 669.02622 895.34184
[25] 1105.48817 242.52422 487.56694 735.67588 976.93840 1203.25949
Run Code Online (Sandbox Code Playgroud)
请注意,每次调用'my_func'对于大'n'和'p'来说都会非常缓慢(对于初学者来说,尝试n = 1000和p = 2000).
现在,在我使用类似构造函数的实际应用程序中,'grid'中的行数远大于此处给出的行数.因此,我试图更好地理解R中的矢量化.
第一个问题:在上面的例子中,是否按顺序执行对'my_func'的调用,以便在下一次调用之前对一次调用中的内存使用情况进行垃圾收集?我经常使用矢量化但从未停止过问这个问题.
第二个问题:(这个问题可能取决于第一)假设呼叫的数量足够大,并且"my_func,并将"足够慢,在这里并行保证?我假设是的.我 …
我尝试Cairo在 Mac OS X 10.7.4 上的 R 开发版本中安装该软件包,但遇到了无法解决的问题。
我已经使用自制程序(即brew install cairo)安装了 Cairo 并收到以下消息:
\n\n\n==> 注意事项此公式仅适用于小桶,因此未符号链接到 /usr/local 中。
\n\nMac OS X 已经提供了这个程序,并行安装另一个版本可能会导致各种麻烦。
\n\nLeopard 提供的 Cairo 太旧,无法链接到较新的软件。
\n\n一般来说,这不会给您带来任何后果。如果您构建自己的软件并且需要此公式,则需要添加其 lib 并包含构建变量的路径:
\n\nRun Code Online (Sandbox Code Playgroud)\nLDFLAGS -L/usr/local/Cellar/cairo/1.12.2/lib\nCPPFLAGS -I/usr/local/Cellar/cairo/1.12.2/include\n
考虑到上述消息,我尝试Cairo使用以下 R 命令从 R-Forge 安装软件包:
\n\n\ninstall.packages("Cairo", repos="http://www.rforge.net/", configure.args = c("CAIRO_LIBS=/usr/local/Cellar/cairo/1.12.2/lib", "CAIRO_CFLAGS =/usr/local/Cellar/cairo/1.12.2/include/cairo"))
\n
我收到以下错误:
\n\n\n检查 cairo.h 可用性...否
\n\n检查 cairo.h 是否存在...否
\n\n正在检查 cairo.h...没有
\n\n配置:错误:找不到 cairo.h!
\n\n请安装 …