R 在一条语句中创建名称为的数字向量?
我正在尝试将函数参数的默认值设置为命名数字。有没有办法在一个语句中创建一个?我检查了?数字和?向量,但看起来不是这样。也许我可以转换/强制一个矩阵或data.frame,并在一个语句中获得相同的结果?说清楚一点,我试图一次完成以下工作:R 在一条语句中创建名称为的数字向量?,r,R,我正在尝试将函数参数的默认值设置为命名数字。有没有办法在一个语句中创建一个?我检查了?数字和?向量,但看起来不是这样。也许我可以转换/强制一个矩阵或data.frame,并在一个语句中获得相同的结果?说清楚一点,我试图一次完成以下工作: test = c( 1 , 2 ) names( test ) = c( "A" , "B" ) 命名向量元素的约定与列表相同: newfunc <- function(A=1, B=2) { body} # the parameters are an
test = c( 1 , 2 )
names( test ) = c( "A" , "B" )
命名向量元素的约定与列表相同:
newfunc <- function(A=1, B=2) { body} # the parameters are an 'alist' with two items
相反,如果您希望它是一个命名列表的参数:
newfunc <- function(params =list(A=1, B=2) ) { body}
# a single parameter (with two elements in a list structure
newfunc命名向量元素的约定与列表相同:
newfunc <- function(A=1, B=2) { body} # the parameters are an 'alist' with two items
相反,如果您希望它是一个命名列表的参数:
newfunc <- function(params =list(A=1, B=2) ) { body}
# a single parameter (with two elements in a list structure
newfunc怎么样:
c(A = 1, B = 2)
A B
1 2
那么:
c(A = 1, B = 2)
A B
1 2
…作为旁注,结构
功能允许您设置所有属性,而不仅仅是名称:
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"
…作为旁注,结构
功能允许您设置所有属性,而不仅仅是名称:
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"
setNames()。如和?集合名中所述:
test <- setNames(c(1, 2), c("A", "B"))
test函数的setNames()
就是为此而设计的。如和?集合名中所述:
test <- setNames(c(1, 2), c("A", "B"))
testmagrittr提供了一种很好的清洁解决方案
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
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
扩展@joran的答案(我无法将其格式正确设置为注释):如果命名向量被分配给变量,则a和B的值通过使用[
函数进行子集设置来访问。使用名称对向量进行子集设置,方法与使用索引编号进行子集设置相同:
my_vector = c(A = 1, B = 2)
my_vector["A"] # subset by name
# A
# 1
my_vector[1] # subset by index
# A
# 1
扩展@joran的答案(我无法将其格式正确设置为注释):如果命名向量被分配给变量,则a和B的值通过使用[
函数进行子集设置来访问。使用名称对向量进行子集设置,方法与使用索引编号进行子集设置相同:
my_vector = c(A = 1, B = 2)
my_vector["A"] # subset by name
# A
# 1
my_vector[1] # subset by index
# A
# 1
啊!我从未尝试过这种表示法,因为我认为它仅限于列表和数据。框架这个答案包含来自的答案,但很难分辨,因为它隐藏在这里:function(params=…){body}
我认为我们对这个问题的理解不同。我认为这个问题是关于函数参数的。joran认为这个问题是关于命名列表或向量项的。这是一种没有很大区别的区别,因为函数参数是列表的一种。实际上我不明白这个答案:可能是body以及如何使用newfunc
获取所需的数据结构会很有帮助。我回答了这个问题(它没有要求用例,只是要求语法上的可能性)如果你在某个特定的操作中需要这个,应该发布一个带有数据的问题,并说明你需要做什么。啊!我从来没有尝试过这种表示法,因为我认为它仅限于列表和数据。框架这个答案包含来自的答案,但很难分辨,因为它隐藏在这里:函数(params=…){body}
我认为我们对这个问题的理解不同。我认为这个问题是关于函数参数的。joran认为这个问题是关于命名列表或向量项的。这是一种没有很大区别的区别,因为函数参数是列表的一种。实际上我不明白这个答案:可能是body以及如何使用newfunc
获取所需的数据结构会很有帮助。我回答了这个问题(它没有要求用例,只是要求语法上的可能性)如果你在某个特定操作中需要这个,应该发布一个问题,并说明你需要做什么。加上一个是创建命名向量的最直接方法。你也可以使用quotesPlus one作为名称创建命名向量的最直接方法。你也可以使用QUOTE作为名称使用字符串如果希望名称与向量相同,请测试最简单的名称,即c(1,2)%%>%set\u名称(.)
如果希望名称与向量相同,请测试最简单的名称,即c(1,2)%%>%set\u名称(.)