Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/127.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_Function_Double Quotes_Single Quotes - Fatal编程技术网

R 如何在自定义函数中重命名列表对象?

R 如何在自定义函数中重命名列表对象?,r,list,function,double-quotes,single-quotes,R,List,Function,Double Quotes,Single Quotes,然后obj将返回带有修改名称的foo和bar。我如何使我的函数实现这一点?从函数调用到函数本身,我也尝试了几种包含引号的组合,但似乎不起作用。一种方法是: set.seed(3) foo <- rnorm(n = 5) bar <- rnorm(n = 5) obj <- list(test=foo,test1=bar) 一种方法是: set.seed(3) foo <- rnorm(n = 5) bar <- rnorm(n = 5) obj <- lis

然后obj将返回带有修改名称的
foo
bar
。我如何使我的函数实现这一点?从函数调用到函数本身,我也尝试了几种包含引号的组合,但似乎不起作用。

一种方法是:

set.seed(3)
foo <- rnorm(n = 5)
bar <- rnorm(n = 5)
obj <- list(test=foo,test1=bar)
一种方法是:

set.seed(3)
foo <- rnorm(n = 5)
bar <- rnorm(n = 5)
obj <- list(test=foo,test1=bar)

将函数命名为
quote
,这是一个非常糟糕的主意,一个非常重要的
R
函数就是这样命名的

使用
setNames

# quote('foo', 'bar')
# $namefoo
# [1] -0.9619334 -0.2925257  0.2587882 -1.1521319
# [5]  0.1957828
# 
# $namebar
# [1]  0.03012394  0.08541773  1.11661021
# [4] -1.21885742  1.26736872

将函数命名为
quote
,这是一个非常糟糕的主意,一个非常重要的
R
函数就是这样命名的

使用
setNames

# quote('foo', 'bar')
# $namefoo
# [1] -0.9619334 -0.2925257  0.2587882 -1.1521319
# [5]  0.1957828
# 
# $namebar
# [1]  0.03012394  0.08541773  1.11661021
# [4] -1.21885742  1.26736872
我们能做到

library(tidyverse)
fun2 <- function(namefoo, namebar){
  set.seed(3)
  foo <- rnorm(n = 5)
  bar <- rnorm(n = 5)
  lst(!!namefoo := foo,!!namebar := bar)
}

fun2("hi","there")
# $hi
# [1] -0.9619334 -0.2925257  0.2587882 -1.1521319  0.1957828
# 
# $there
# [1]  0.03012394  0.08541773  1.11661021 -1.21885742  1.26736872
quotefn我们可以做

library(tidyverse)
fun2 <- function(namefoo, namebar){
  set.seed(3)
  foo <- rnorm(n = 5)
  bar <- rnorm(n = 5)
  lst(!!namefoo := foo,!!namebar := bar)
}

fun2("hi","there")
# $hi
# [1] -0.9619334 -0.2925257  0.2587882 -1.1521319  0.1957828
# 
# $there
# [1]  0.03012394  0.08541773  1.11661021 -1.21885742  1.26736872
quotefn
quotefn <- function(...) {
        nm <- c(...)
        out <- replicate(length(nm), rnorm(n = 5), simplify = FALSE)
        names(out) <- nm
        out}
quotefn("foo", "bar")
#$foo
#[1] -0.5784837 -0.9423007 -0.2037282 -1.6664748 -0.4844551

#$bar
#[1] -0.74107266  1.16061578  1.01206712 -0.07207847 -1.13678230