Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何使用命名参数来匹配&;编辑命名对象列表的名称_R_List_Methods_Names - Fatal编程技术网

R:如何使用命名参数来匹配&;编辑命名对象列表的名称

R:如何使用命名参数来匹配&;编辑命名对象列表的名称,r,list,methods,names,R,List,Methods,Names,我试图弄清楚如何创建一个函数来获取一组命名参数,参数值取自特定列表,并通过将命名元素(在列表的元素名称中,但在函数参数的元素值中)替换为函数参数的参数名称来修改列表。(这个名称向量首先取自一个数据帧,不过我认为这并不重要,下面也没有包括它)。求值为多个名称的参数,或通过数字或逻辑向量表示范围的参数,以引号形式单独保存,以供以后处理 这似乎是一个非常简单的问题,但我还没有弄明白怎么做。关键的是,它必须完全以编程方式完成。我的实函数将有一个不确定的、潜在大量的参数,如下所述 为了说明我所说的内容,下

我试图弄清楚如何创建一个函数来获取一组命名参数,参数值取自特定列表,并通过将命名元素(在列表的元素名称中,但在函数参数的元素值中)替换为函数参数的参数名称来修改列表。(这个名称向量首先取自一个数据帧,不过我认为这并不重要,下面也没有包括它)。求值为多个名称的参数,或通过数字或逻辑向量表示范围的参数,以引号形式单独保存,以供以后处理

这似乎是一个非常简单的问题,但我还没有弄明白怎么做。关键的是,它必须完全以编程方式完成。我的实函数将有一个不确定的、潜在大量的参数,如下所述

为了说明我所说的内容,下面是一个“框架”函数示例,它缺少实际进行更改的勇气:

ChangeIt <- function(dog = NULL, cat = NULL, cow = NULL, ...){
xx <- c("a", "b", "c", "d", "e", "f", "g", "h") 
#  missing stuff here
if (is.NULL(cow)) print("No cows!")
list(xx, complex_assignments = list())
}
这就是ChangeIt应该返回的内容,基于这些值。(这是一个描述,而不是字面上的打印方式)

“没有奶牛!”
(打印为副作用)

然后返回:

list(xx = c("cat", "dog", "c", "d", "e", "yak", "eel", "h"), 
complex_assignments = list("zoo = 3:5"))
您可以看到,命名参数的值用于匹配原始列表中的元素,而该参数中的名称将转换为文本,然后替换已标识的元素。这就是目标

为了解释我的目的,我想为一个数据帧维护两组独立的名称,一组用于它显示世界的面,另一组仅可由我为该对象编写的方法访问。

这如何

ChangeIt <- function(dog = NULL, cat = NULL, cow = NULL, ...){
  cc <- match.call()
  cc[[1]] <- quote(list)
  allargs <- eval(cc)
  xx <- c("a", "b", "c", "d", "e", "f", "g", "h")
  toreplace <- sapply(allargs, function(x) {length(x)==1 && x %in% xx})
  xx <- replace(xx, match(unlist(allargs[toreplace]), xx), names(allargs[toreplace]))
  if (is.null(cow)) print("No cows!")
  list(xx=xx, complex_assignments = allargs[!toreplace])
}

ChangeIt(dog = "b", cat = "a", yak = "f", eel = "g", zoo = 3:5)

ChangeIt谢谢Flick先生!对我来说就是这样。事实上,我对此感到非常兴奋——它使我能够用简单的方法来构造S3类。现在我需要它来弄清楚,将如上所述构造的向量作为DF的属性或存储在新列(或其他方式)中是否更有意义。
ChangeIt <- function(dog = NULL, cat = NULL, cow = NULL, ...){
  cc <- match.call()
  cc[[1]] <- quote(list)
  allargs <- eval(cc)
  xx <- c("a", "b", "c", "d", "e", "f", "g", "h")
  toreplace <- sapply(allargs, function(x) {length(x)==1 && x %in% xx})
  xx <- replace(xx, match(unlist(allargs[toreplace]), xx), names(allargs[toreplace]))
  if (is.null(cow)) print("No cows!")
  list(xx=xx, complex_assignments = allargs[!toreplace])
}

ChangeIt(dog = "b", cat = "a", yak = "f", eel = "g", zoo = 3:5)