有没有一种方法可以重新分配R访问器函数,并使用它来更新它访问的变量属性



在我的代码中,有一种情况是我有条件地希望在整个代码中使用一个或另一个访问器函数。我没有在每次选择要使用的访问器并对其进行显式编码时都使用if-else语句,而是尝试有条件地将其中一个访问器函数分配给一个名为accessor_fun的新函数,并在整个代码中使用它,但当我使用访问器函数重新分配它访问的值时,会返回错误。以下是我遇到的问题的一个简化示例:

#reassigning the base r function names to a new function name
alt_names_fun <- names
example_list <- list(cat = 7, dog = 8, fish = 33)
other_example_list <- list(table = 44, chair = 101, desk = 35)

#works
alt_names_fun(example_list)
#throws error
alt_names_fun(example_list) <- alt_names_fun(other_example_list)
#still throws error
access_and_assign <- function(x, y, accessor) {
accessor(x) <- accessor(y)
}
access_and_assign(x = example_list, y = other_example_list, accessor = alt_names_fun)
#still throws error
alt_names_fun_2 <- function(x){names(x)}
alt_names_fun_2(example_list) <- alt_names_fun_2(other_example_list)

#works
names(example_list) <- names(other_example_list)

正如你所看到的,如果你尝试上面的代码,我得到的错误的一个例子是

Error in alt_names_fun(example_list) <- alt_names_fun(other_example_list) : 
could not find function "alt_names_fun<-"

所以我的问题是,有没有一种方法可以重新分配R访问器函数,并以我在上面的例子中尝试的方式使用它们?

访问器函数实际上是函数对。一个用于检索,一个用于分配。如果你想复制它,你需要复制的两个部分

alt_names_fun <- names
`alt_names_fun<-` <- `names<-`

分配版本的名称中有<-。这是R用来寻找它们的一种特殊命名对流。由于基本符号名称中通常不允许使用这些字符,因此需要使用反勾号将函数名称括起来。

最新更新