【问题标题】:define column names as combination of a repeated string and a vector in R将列名定义为 R 中重复字符串和向量的组合
【发布时间】:2016-02-05 14:13:09
【问题描述】:

我想通过使用字符串和行长度向量来命名矩阵的列。举个例子:

 k<-c(5:15)
 xMin = 3
 xMax = 15
 x<-c(xMin:xMax)
 M<-matrix(, nrow = length(x), ncol = length(k))

理想情况下,我想使用字符串和向量 k 来命名矩阵列,其中第 i 列的列名与向量 k 的第 i 个位置的项目相同。

所以,我希望它看起来像这样:

      S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 S15
 [1,] NA NA NA NA NA NA NA NA NA NA NA
 [2,] NA NA NA NA NA NA NA NA NA NA NA
 [3,] NA NA NA NA NA NA NA NA NA NA NA
 [4,] NA NA NA NA NA NA NA NA NA NA NA
 [5,] NA NA NA NA NA NA NA NA NA NA NA
 [6,] NA NA NA NA NA NA NA NA NA NA NA
 [7,] NA NA NA NA NA NA NA NA NA NA NA
 [8,] NA NA NA NA NA NA NA NA NA NA NA
 [9,] NA NA NA NA NA NA NA NA NA NA NA
[10,] NA NA NA NA NA NA NA NA NA NA NA
[11,] NA NA NA NA NA NA NA NA NA NA NA
[12,] NA NA NA NA NA NA NA NA NA NA NA
[13,] NA NA NA NA NA NA NA NA NA NA NA

字符串是“S”。 奇怪的是,没有奏效的是:

N=NULL
N<- as.vector(N)
m=1
for (m in length(k))
{
N[m]<-paste0("s_",k[m])
}
N

=> 输出是一个充满 NA 的向量! 虽然,当我手动迭代 'm' 时,它起作用了(为什么它不能在循环中工作?)!

无论我想得到什么,当然是:

> N
 [1] "s_5"  "s_6"  "s_7"  "s_8"  "s_9"  "s_10" "s_11" "s_12"
 [9] "s_13" "s_14" "s_15"

我可以很容易地用于:

colnames(M)<-N

我当然希望使用相同的程序来命名行。

【问题讨论】:

  • paste("s", seq(from = 5, to = 15), sep = "_")

标签: r matrix vector


【解决方案1】:

你不需要循环。 paste 被矢量化了。

k = seq(from = 5, to = 15)
paste("s", k, sep = "_")

paste0("s_", k)

但是,如果您对循环失败的原因感到好奇,那是因为除了 length 的结果之外,您实际上并没有循环任何东西。因此,其他向量元素中的 NA 值。你需要有一些东西来迭代循环。在这种情况下,您可以使用seq(length(k))seq_along 之类的简单内容。

for (m in seq_along(k))
{
  N[m]<-paste0("s_",k[m])
}

【讨论】:

  • 感谢您的帮助。因为不想使用带有 from 和 to 的序列,因为我的向量 k 可以有各种输入,这些输入可能不是连续的。但是通过使用 seq(length(k)) 的迭代,我得到了我需要的东西。再次感谢。
  • @LxndrF 你可以直接使用k
  • 好的,谢谢。我得到了它。 for (m in seq(length(k))) { N[m]
猜你喜欢
  • 2021-05-23
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多