r - 函数内列表元素的全局分配,使用列表的变量名
问题描述
标题有点松。我想创建一个将列表名称作为变量的函数,并将元素分配给该列表。到目前为止,我可以通过my_fun
函数中的名称访问列表的元素。然后我可以修改函数中的列表(使用函数参数),并print
验证分配是否有效。当然,我没有将这些保存到全局环境中,所以当我在函数之外调用列表时,它并没有改变。
my_list <- list('original_element')
my_fun <- function(some_list) {
# check that I can access the list using the parameter name
print(some_list[[1]])
# modify the list
some_list[[1]] <- 'element_assigned_in_function'
# check that the list was modified
print(some_list[[1]])
}
my_fun(my_list)
# [1] "original_element"
# [1] "element_assigned_in_function"
# of course, my_list hasn't been modified in the global environment
my_list
# [[1]]
# [1] "original_element"
我的问题是,您如何在函数中将新元素分配给该列表并将它们存储在全局环境中?如果我只是尝试使用 将赋值设为全局<<-
,则会引发以下错误:
some_list [[1]] <<-“element_assigned_in_function”中的错误:找不到对象“some_list”
我尝试使用assign
和 set envir = .GlobalEnv
,但这不起作用,我认为assign
不能与列表元素一起使用。我怀疑可能有一些引用/取消引用/使用表达式来使其工作,但我无法弄清楚。谢谢你。
解决方案
首先,我要明确一点,我不鼓励在全局环境中从函数内部为变量赋值。理想情况下,您应该始终return
使用要更改的函数的值。但是,仅出于演示目的,这里是一种您可以从函数内部更改列表内容的方法
my_fun <- function(some_list) {
list_name <- deparse(substitute(some_list))
some_list[[1]] <- 'element_assigned_in_function'
assign(list_name, some_list, .GlobalEnv)
}
my_list <- list('original_element')
my_fun(my_list)
my_list
#[[1]]
#[1] "element_assigned_in_function"
推荐阅读
- javascript - 有人能告诉我如何让我的本地仓库上的主分支反映远程仓库上的主分支吗?
- angular - 如何在角度创建/更新具有多对多关系的模型
- json - 如何在 yaml 文件中添加 json 条目?
- python - TabError:从模型中读取最后一个对象时,缩进中制表符和空格的使用不一致
- php - wordpress 消耗大量 CPU
- javascript - TinyMCE .filter() 不是提到的功能(Laravel)
- python - ValueError:发现样本数量不一致[1691、725]
- php - 我不明白为什么 get_class_vars() 在 php 7 和 codeigniter 4 中不起作用
- sql - SQL sum 除以日期计数
- jsp - 如何使用 jdbc 连接到 oracle