首页 > 解决方案 > 如何根据 R 中的特定长度设置名称

问题描述

这只是一个例子。我的功能很复杂,setNames是功能代码的一部分

我有一个xx带有11元素的向量。我想给所有元素起1:10一个特殊的名字。但是,我想给最后一个元素一个不同的名称。我试过setNames了,但它给了我所有元素的相同名称。

xx <- c(1:11)
myfun <- function(i) {
  setNames(i, paste0("at level:", seq_along(i)))
}


> myfun(xx)
 at level:1  at level:2  at level:3  at level:4  at level:5  at level:6  at level:7  at level:8  at level:9 
          1           2           3           4           5           6           7           8           9 
at level:10 at level:11 
         10          11 

我希望第一个10元素的名称为at level. 但是,我想将最后一个元素命名为Final element.

这是另一个尝试:

  myfun <- function(i){
  mm <- length(i)
fin <- setNames(i-1 , paste0("at level:", 1:(mm-1)))
fin}
myfun(xx)

但我得到NA了最后一个元素。

> myfun(xx)
 at level:1  at level:2  at level:3  at level:4  at level:5  at level:6  at level:7  at level:8  at level:9 
          0           1           2           3           4           5           6           7           8 
at level:10        <NA> 
          9          10 

我的向量的长度并不总是11它可以是任何数字2: infinity

请问有什么帮助吗?

标签: r

解决方案


seq_along(xx)例如,如果您按如下方式设置参数n = -1,则可以排除最后一个元素head()

setNames(xx ,
         nm = c(paste0("at level:", head(seq_along(xx), -1)), "Final element"))
#at level:1    at level:2    at level:3    at level:4    at level:5    at level:6    at level:7    at level:8    at level:9   at level:10 Final element 
#         1             2             3             4             5             6             7             8             9            10            11

?head

n:单个整数。如果为正,则结果对象的大小:向量(包括列表)的元素数,矩阵或数据框的行数或函数的行数。如果为负数,则除 x 的 n 个最后/第一个元素之外的所有元素。


推荐阅读