gpt4 book ai didi

r - R中的参数传递机制

转载 作者:行者123 更新时间:2023-12-04 11:55:44 25 4
gpt4 key购买 nike

以下函数用于将序列1:x乘以y

f1<-function(x,y){return (lapply(1:x, function(a,b) b*a, b=y))}

貌似a是用来表示序列1:x中的元素,但是不知道怎么理解这个参数传递机制。在其他 OO 语言中,如 Java 或 C++,有 call by referencecall by value

最佳答案

简答:R按值调用。长答案:两者都可以。

按值调用、惰性评估和范围界定

您需要通读:the R language definition了解更多详情。

R 主要使用 按值调用 但这因其惰性求值而变得复杂:

所以你可以有一个功能:

f <- function(x, y) {
x * 3
}

如果将两个大矩阵传入xy,则只有x会被复制到f的被调用环境中,因为从不使用 y

但是你也可以访问f的父环境中的变量:

y <- 5
f <- function(x) {
x * y
}
f(3) # 15

甚至:

y <- 5
f <- function() {
x <- 3
g <- function() {
x * y
}
}
f() # returns function g()
f()() # returns 15

通过引用调用

据我所知,在 R 中进行 call by reference 有两种方法。

一个是使用Reference Classes ,R 的三个面向对象范例之一(另见:Advanced R programming: Object Oriented Field Guide)

另一种是使用 bigmemorybigmatrix 包(见 The bigmemory project )。这允许您在内存中创建矩阵(底层数据存储在 C 中),返回指向 R session 的指针。这使您可以做一些有趣的事情,例如从多个 R session 中访问同一个矩阵。

关于r - R中的参数传递机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20986093/

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