在 R 中,当名称是字符向量的值时如何按名称指示参数?
In R, how to indicate an argument by name when that name is the value of a character vector?
假设我需要这样做:
foo <- list(`a+b` = 5)
但是我有 'a+b'
(一个字符串)保存在一个变量中,比方说 name
:
name <- 'a+b'
如何使用名称为变量 name
中的值的元素创建该列表?
注意:我知道为列表元素指定名称的其他方法。这里的列表只是一个例子。我想了解的是我如何处理非标准评估,以便我可以向函数指示命名参数,而不必直接内联输入它。
我已阅读 Hadley 的 Advanced R 第 13 章关于非标准评估的内容,但我仍然不知道如何执行此操作。
任何基于 R 或 Tidy Evaluation 的解决方案都值得赞赏。
我们可以使用setNames
bar <- setNames(list(5), name)
identical(foo, bar)
#[1] TRUE
或者先创建对象再使用names
bar2 <- list(5)
names(bar2) <- name
或 names<-
bar3 <- `names<-`(list(5), name)
此外,tidyverse
选项将取消引用 (!!
) 并分配 (:=
)
library(tidyverse)
lst(!! name := 5)
#$`a+b`
#[1] 5
假设我需要这样做:
foo <- list(`a+b` = 5)
但是我有 'a+b'
(一个字符串)保存在一个变量中,比方说 name
:
name <- 'a+b'
如何使用名称为变量 name
中的值的元素创建该列表?
注意:我知道为列表元素指定名称的其他方法。这里的列表只是一个例子。我想了解的是我如何处理非标准评估,以便我可以向函数指示命名参数,而不必直接内联输入它。
我已阅读 Hadley 的 Advanced R 第 13 章关于非标准评估的内容,但我仍然不知道如何执行此操作。
任何基于 R 或 Tidy Evaluation 的解决方案都值得赞赏。
我们可以使用setNames
bar <- setNames(list(5), name)
identical(foo, bar)
#[1] TRUE
或者先创建对象再使用names
bar2 <- list(5)
names(bar2) <- name
或 names<-
bar3 <- `names<-`(list(5), name)
此外,tidyverse
选项将取消引用 (!!
) 并分配 (:=
)
library(tidyverse)
lst(!! name := 5)
#$`a+b`
#[1] 5