我正在尝试将函数参数的默认值设置为命名数字.有没有办法在一个语句中创建一个?我检查了?数字和?矢量,但它似乎不是这样.也许我可以转换/强制矩阵或data.frame并在一个语句中实现相同的结果?为了清楚起见,我试图一次性完成以下工作:
test = c( 1 , 2 )
names( test ) = c( "A" , "B" )
Run Code Online (Sandbox Code Playgroud)
Aar*_*her 80
该setNames()
功能是为此目的而制作的.如高级R和?setNames
:
test <- setNames(c(1, 2), c("A", "B"))
Run Code Online (Sandbox Code Playgroud)
Tom*_*mmy 57
...作为旁注,该structure
函数允许您设置所有属性,而不仅仅是名称:
structure(1:10, names=letters[1:10], foo="bar", class="myclass")
Run Code Online (Sandbox Code Playgroud)
哪个会产生
a b c d e f g h i j
1 2 3 4 5 6 7 8 9 10
attr(,"foo")
[1] "bar"
attr(,"class")
[1] "myclass"
Run Code Online (Sandbox Code Playgroud)
42-*_*42- 20
命名向量元素的约定与列表相同:
newfunc <- function(A=1, B=2) { body} # the parameters are an 'alist' with two items
Run Code Online (Sandbox Code Playgroud)
如果你希望这是一个参数,它是一个命名向量(将处理由提供的参数的函数的类型apply
):
newfunc <- function(params =c(A=1, B=2) ) { body} # a vector wtih two elements
Run Code Online (Sandbox Code Playgroud)
如果您希望这是一个名为list的参数:
newfunc <- function(params =list(A=1, B=2) ) { body}
# a single parameter (with two elements in a list structure
Run Code Online (Sandbox Code Playgroud)
magrittr提供了一个不错且干净的解决方案。
result = c(1,2) %>% set_names(c("A", "B"))
print(result)
A B
1 2
Run Code Online (Sandbox Code Playgroud)
您也可以使用它将data.frames转换为向量。
df = data.frame(value=1:10, label=letters[1:10])
vec = extract2(df, 'value') %>% set_names(df$label)
vec
a b c d e f g h i j
1 2 3 4 5 6 7 8 9 10
df
value label
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e
6 6 f
7 7 g
8 8 h
9 9 i
10 10 j
Run Code Online (Sandbox Code Playgroud)