在一个语句中创建一个带有名称的数字向量?

时间:2011-09-23 22:20:24

标签: r

我正在尝试将函数参数的默认值设置为命名数字。有没有办法在一个语句中创建一个?我检查了?数字和?矢量,但它似乎不是这样。也许我可以转换/强制矩阵或data.frame并在一个语句中实现相同的结果?为了清楚起见,我试图一次性完成以下任务:

test = c( 1 , 2 )
names( test ) = c( "A" , "B" )

6 个答案:

答案 0 :(得分:72)

setNames()功能是为此目的而制作的。如Advanced R?setNames中所述:

test <- setNames(c(1, 2), c("A", "B"))

答案 1 :(得分:55)

...作为旁注,structure函数允许您设置所有属性,而不仅仅是名称:

structure(1:10, names=letters[1:10], foo="bar", class="myclass")

哪会产生

 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"

答案 2 :(得分:43)

怎么样:

 c(A = 1, B = 2)
A B 
1 2 

答案 3 :(得分:19)

命名向量元素的约定与列表相同:

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

如果您希望这是一个名为list的参数:

newfunc <- function(params =list(A=1, B=2) ) { body} 
    # a single parameter (with two elements in a list structure

答案 4 :(得分:5)

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

答案 5 :(得分:0)

要扩展@joran的答案(我无法正确地将其格式化为注释):如果将命名向量分配给变量,则使用{{1}通过子集访问A和B的值}函数。使用名称对向量进行子集化的方式与使用索引号对向量进行子集化的方式相同:

[