我在理解R的语义和语法方面遇到了很多麻烦。在我看来,局部变量无法在函数内部进行修改。
例如,在这个基本代码中,我希望heatmap.matrix
变量在我调用foo()
函数时得到更新。
heatmap.matrix <- matrix(rep(0,40000), nrow=200, ncol=200)
# foo function should just update a single cell of the declared matrix
foo <- function() { heatmap.matrix[40,40] <- 100}
heatmap.matrix[40,40]
[1] 0
foo()
heatmap.matrix[40,40]
[1] 0
# there I expected it to return 100. Yet if I do it out of the function:
heatmap.matrix[40,40] <- 100
[1] 100
这让我相信在函数求值之后,范围的变量不会被传回。 是R的情况吗?还有其他事情发生吗?我觉得我真的不知道发生了什么。真的很感激任何帮助/见解!
为了给出快速解释,在我的代码中,我有一个包含x
和y
列的频率表,我正在尝试将其转换为具有相应值的二维矩阵输入频率表,如果没有相应的输入则为零。但是,我无法在apply函数中修改矩阵。
答案 0 :(得分:1)
可以使用get
和assign
函数在函数中更新全局变量。下面是代码,它们也是如此:
heatmap.matrix <- matrix(rep(0,40000), nrow=200, ncol=200)
# foo function should just update a single cell of the declared matrix
varName <- "heatmap.matrix"
foo <- function() {
heatmap.matrix.copy <- get(varName)
heatmap.matrix.copy[40,40] <- 100
assign(varName, heatmap.matrix.copy, pos=1)
}
heatmap.matrix[40,40]
#[1] 0
foo()
heatmap.matrix[40,40]
# [1] 100
你应该阅读一下环境概念。最好的起点是http://adv-r.had.co.nz/Environments.html