我有一个函数可以根据给定的模型,数据矩阵和列名进行一些计算。
但是我在理解如何传递有关列名的信息时遇到了一些困难。我试过了:
var=as.name("IR2")
summary(mat$var)
但它不起作用。有可能做我想要的吗?感谢
要测试的代码:
mat <- matrix(rnorm(20), ncol=2, nrow=10)
colnames(mat) <- c("fy","IR2")
答案 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