Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在一条语句中创建名称为的数字向量?_R - Fatal编程技术网

R 在一条语句中创建名称为的数字向量?

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

我正在尝试将函数参数的默认值设置为命名数字。有没有办法在一个语句中创建一个?我检查了?数字和?向量,但看起来不是这样。也许我可以转换/强制一个矩阵或data.frame,并在一个语句中获得相同的结果?说清楚一点,我试图一次完成以下工作:

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名称(.)