testFunc2() [1]-6ren">
sách gpt4 ai đã đi

Lập trình R - Tạo một biến trong môi trường mà nó được gọi từ

In lại 作者:行者123 更新时间:2023-12-04 11:32:03 26 4
mua khóa gpt4 Nike

我有一个函数,它的任务是在父对象中创建一个变量。我想要的是让函数在调用它的级别创建变量。

createVariable <- function(var.name, var.value) {
assign(var.name,var.value,envir=parent.frame())
}


# Works
testFunc <- function() {
createVariable("testVar","test")
print(testVar)
}

# Doesn't work
testFunc2 <- function() {
testFunc()
print(testVar)
}

> testFunc()
[1] "test"
> testFunc2()
[1] "test"
Error in print(testVar) : object 'testVar' not found

我想知道是否有任何方法可以在不在全局环境范围内创建变量的情况下做到这一点。

编辑:是否还有一种方法可以对已创建的变量进行单元测试?

1 Câu trả lời

尝试这个:

createVariable <- function(var.name, var.value) {
assign(var.name,var.value,envir=parent.env(environment()))
}

biên tập:
更多详情 đâyđây .
使用初始解决方案,变量是在全局环境中创建的,因为 parent.env是定义函数的环境和 createVariable函数是在全局环境中定义的。

您可能还想尝试 assign(var.name,var.value,envir=as.environment(sys.frames()[[1]])) ,这将在调用 createVariable 的最高测试函数中创建它在您的示例中(调用堆栈上的第一个),但是在这种情况下,您需要删除 print(testVar)Từ testFunc当您调用 testFunc2因为变量只能在 testFunc2的环境中创建, 不是 testFunc .我不知道这是否是您所说的 at the level at which it's called .

如果你运行这个:
createVariable <- function(var.name, var.value) {
assign(var.name,var.value,envir=as.environment(sys.frames()[[1]]))
print("creating")
}



testFunc <- function() {
createVariable("testVar","test")
print("func1")
print(exists("testVar"))
}

testFunc2 <- function() {
testFunc()
print("func2")
print(exists("testVar"))
}

testFunc()
testFunc2()

你得到
> testFunc()
[1] "creating"
[1] "func1"
[1] TRUE
> testFunc2()
[1] "creating"
[1] "func1"
[1] FALSE
[1] "func2"
[1] TRUE

这意味着 testVarhiện hữu testFun2的环境,不在 testFunc的。像其他人所说的那样创建一个新环境可能更安全。

关于R 编程 - 在它被调用的环境中创建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28504871/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com