将字符串转换为列名

时间:2014-09-09 01:11:17

标签: r

我有一个函数可以根据给定的模型,数据矩阵和列名进行一些计算。

但是我在理解如何传递有关列名的信息时遇到了一些困难。我试过了:

var=as.name("IR2")
summary(mat$var)

但它不起作用。有可能做我想要的吗?感谢

要测试的代码:

mat <- matrix(rnorm(20), ncol=2, nrow=10)
colnames(mat) <- c("fy","IR2")

2 个答案:

答案 0 :(得分:1)

如果列名未知,则可以通过以下方式调用

mat[, "columnName"]

在您的情况下,如果您只想在“fy”列上工作,可以将该列名称传递给您的函数并按上述方式调用它。

你基本上是在打电话

mat[,"fy"]

例如,假设我们要编写一个接受矩阵和列名称的函数,并计算给定列的平均值(我们想从头开始创建它,因为这是一个例子)

#mat is evaluated to be the following
 mat
 #          fy        IR2
 #[1,]  1.0355858 -0.1065325
 #[2,]  1.0415242 -0.7736924
 #[3,] -0.7607343 -1.6289547
 #[4,]  0.6743018 -0.4028445
 #[5,]  1.2324244  0.4847683
 #[6,]  0.2128944  1.1584937
 #[7,]  0.9460752 -1.6287894
 #[8,]  0.7093235  1.5833613
 #[9,]  0.3015283  0.3296974
 #[10,]  0.2002134  1.7815022

 mat[,"fy"]
 #this returns a vector, the column fy
 #[1]  1.0355858  1.0415242 -0.7607343  0.6743018  1.2324244  0.2128944
 #[7]  0.9460752  0.7093235  0.3015283  0.2002134

 colMean<-function(mat, columnName){
      mean(mat[,columnName])
}

colMean(mat, "fy")
#[1] 0.5593137

在这种情况下,$将不起作用,因为mat $ var正在mat中查找列名“var”,该名称不存在。如上所示,列也可以按名称在单个括号内进行子集化。

答案 1 :(得分:0)

您是否只想使用dimnames命名列?

mat <- matrix(rnorm(20), ncol=2, nrow=10, dimnames= list(c(1:10), c("fy","IR2")))

dimnames包含一个长度为2的列表 - 第一个包含rownames的元素,第二个元素是列名。

           fy         IR2
1   1.5718232  2.18202170
2  -1.4817695  1.33032923
3  -1.2346067 -1.30057189
4   1.0391464  1.27644013
5  -1.0915758 -0.24596097
6  -1.2552700  1.96342065
7  -0.4298826 -0.09694546
8   1.7375874  1.44590566
9   0.2504768  0.19940885
10  0.3293833 -0.88001511