r - R:存储要由函数返回的变量内容,如果重新分配对象,则该函数不会更改
问题描述
我需要创建一个函数来返回存储为变量的一段数据。但是,此变量稍后将被重新分配。如何指定一个函数来返回变量的当前内容(不为其分配唯一变量),而不是在执行函数时调用该变量?
v <- mtcars[["mpg"]]
v
#> [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
#> [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
#> [31] 15.0 21.4
f <- function(x) v # I would like to here specify "the content of v" and not v the variable
# Because otherwise, if v gets re-assigned...
v <- 3
# the function pulls the new variable (which is expected, but is not what I need)
f()
#> [1] 3
由reprex 包(v1.0.0)于 2021-06-08 创建
例如,我尝试过:f <- function(x) eval(v)
希望它是存储在函数中的“内容”,但它不起作用。
部分解决方案及后续问题
虽然@Waldi 的答案在我给出的示例中有效,但我忘了补充一点,为了让事情变得更糟,我实际上需要将此函数存储在一个列表中(我不制定规则哈哈),这违反了建议双函数解决方案,因为列表中的对象返回一个函数而不是变量的内容:
v <- mtcars$mpg
f <- function(x) function() x
thelist <- list("specific_name" = f(v))
thelist[["specific_name"]]
#> function() x
#> <environment: 0x000000001419c068>
由reprex 包(v1.0.0)于 2021-06-08 创建
请注意,调用列表中的对象thelist$specific_name()
或thelist[["specific_name"]]()
工作,但在我的情况下不是一个选项(因为将函数列表作为输入的包不调用函数,而只是“正常”检索它们 [没有()
] 并期望值) .
解决方案
您可以创建一个函数,该函数返回一个存储当前值的函数:
v <- mtcars$mpg
f <- function(x) function() x
g <- f(v)
g()
#> [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
#> [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
#> [31] 15.0 21.4
v <- 3
g()
#> [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
#> [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
#> [31] 15.0 21.4
推荐阅读
- javascript - 添加滚动时活动的类。香草JS
- python - 为什么 BeautifulSoup 一直说我需要更新浏览器?
- python - 我无法弄清楚功能
- java - Enum.values() 或 Enum.class.getEnumConstants() 首选哪种用法?
- python - Pandas:返回每组出现频率最高的值(可能没有应用)
- ssh - Windows 上的 ssh 连接被拒绝(wsl)
- python-3.x - 将列表转换为 PCollection
- c++ - 为什么我的 if 语句在它应该评估的时候没有评估 false?
- arrays - 如何使用 Powershell 为文件中的每一行创建一个新数组?
- azure - 尝试在 Azure 上部署无框架静态 Web 应用程序时,为什么我会从 GitHub Actions 收到构建错误?