我正在尝试将函数参数的默认值设置为命名数字。有没有一种方法可以在一个语句中创建一个?我检查了“数字”和“向量”,但事实并非如此。也许我可以在一个语句中转换/强制转换矩阵或data.frame并获得相同的结果?明确地说,我正在尝试一次完成以下操作:
test = c( 1 , 2 )
names( test ) = c( "A" , "B" )
Answers:
矢量元素的命名约定与列表相同:
newfunc <- function(A=1, B=2) { body} # the parameters are an 'alist' with two items
如果相反,您希望将其作为一个命名矢量(一种处理由所提供的参数的函数apply
)的参数:
newfunc <- function(params =c(A=1, B=2) ) { body} # a vector wtih two elements
相反,如果您希望这是一个名为列表的参数:
newfunc <- function(params =list(A=1, B=2) ) { body}
# a single parameter (with two elements in a list structure
function(params= ...) { body }
body
以及如何使用它newfunc
来获取所请求的数据结构会有所帮助。
该setNames()
功能就是为此目的而设计的。如Advanced R和?setNames
:
test <- setNames(c(1, 2), c("A", "B"))
magrittr提供了一个不错且干净的解决方案。
result = c(1,2) %>% set_names(c("A", "B"))
print(result)
A B
1 2
您也可以使用它将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
c(1,2) %>%set_names(.)