如何在参数中使用字符作为变量名? [R]
How to use character as variable name in arguments? [R]
我想知道如何告诉 R 我在函数参数中使用的字符串代表变量而不是字符串本身。具体来说,我正在处理 'Dict' 包和 运行 以下代码作为试用。
library(Dict)
x = c(1,2)
d = dict(x = 1)
d$keys
# 'x'
我想要的是 c(1,2)
而不是 'x'
作为密钥。同样的问题也适用于 'list',例如
y = 'happy'
l = list(y = 1)
names(l)
结果将是 'y'
。此外,可以通过以下方式解决这种情况
names(l) <- y
,但我认为这不是很高效和干净。
有人知道如何用一行代码做到这一点吗?谢谢!
我们可以使用 setNames
out <- do.call(dict, setNames(rep(list(1), length(x)), x))
out$keys
[1] "1" "2"
或者我们可以使用 invoke
或 exec
library(purrr)
out <- invoke(dict, setNames(rep(1, length(x)), x))
out <- exec(dict, !!!setNames(rep(1, length(x)), x))
对于第二种情况,setNames
也有效
setNames(list(1), y)
$happy
[1] 1
或者我们可以使用 dplyr::lst
dplyr::lst(!! y := 1)
$happy
[1] 1
我想知道如何告诉 R 我在函数参数中使用的字符串代表变量而不是字符串本身。具体来说,我正在处理 'Dict' 包和 运行 以下代码作为试用。
library(Dict)
x = c(1,2)
d = dict(x = 1)
d$keys
# 'x'
我想要的是 c(1,2)
而不是 'x'
作为密钥。同样的问题也适用于 'list',例如
y = 'happy'
l = list(y = 1)
names(l)
结果将是 'y'
。此外,可以通过以下方式解决这种情况
names(l) <- y
,但我认为这不是很高效和干净。
有人知道如何用一行代码做到这一点吗?谢谢!
我们可以使用 setNames
out <- do.call(dict, setNames(rep(list(1), length(x)), x))
out$keys
[1] "1" "2"
或者我们可以使用 invoke
或 exec
library(purrr)
out <- invoke(dict, setNames(rep(1, length(x)), x))
out <- exec(dict, !!!setNames(rep(1, length(x)), x))
对于第二种情况,setNames
也有效
setNames(list(1), y)
$happy
[1] 1
或者我们可以使用 dplyr::lst
dplyr::lst(!! y := 1)
$happy
[1] 1