我有一个看起来如下的矩阵:
> train.y.class[1:2,]
Class_1 Class_2 Class_3 Class_4 Class_5 Class_6 Class_7 Class_8 Class_9
[1,] 1 0 0 0 0 0 0 0 0
[2,] 0 0 0 0 1 0 0 0 0
然后传递给R函数tune
,它将对可能的模型参数执行网格搜索。为了做到这一点,它定期切片这些数据并将其传递给模型。这些切片是它开始分解的地方;它有点像
do.call(model, x, y[1:n], ...)
...而y[1:n]
返回n个元素的向量,而不是想要的n x 9矩阵。也就是说,我需要看起来像上面的矩阵,但我得到这样的东西:
> train.y.class[1:2]
[1] 1 0
由于我无法访问此库代码,我的问题是是否可以将我的矩阵重新格式化为允许形式为y.new[1:n]
的切片的结构,其结果与y.old[1:n,]
相同,即一个nx 9矩阵。如果你愿意的话,这是一个聪明的黑客。
如果答案是否定的,您能提出替代解决方案吗?我已经尝试了替代数据表示(不是矩阵)和模型包装器的组合,但我还没有完全重新格式化参数然后调用包装函数。
答案 0 :(得分:0)
y[1:n, ]
将返回一个n x 9矩阵。
当您使用一维参数对矩阵进行子集化时,您只需按列主要顺序获取矩阵的元素:
> (mat <- matrix(letters[1:20], ncol = 5)) # example matrix
[,1] [,2] [,3] [,4] [,5]
[1,] "a" "e" "i" "m" "q"
[2,] "b" "f" "j" "n" "r"
[3,] "c" "g" "k" "o" "s"
[4,] "d" "h" "l" "p" "t"
> mat[1:6] # returns vector of length six
[1] "a" "b" "c" "d" "e" "f"
> mat[2:3, ] # returns 2 x 6 matrix
[,1] [,2] [,3] [,4] [,5]
[1,] "b" "f" "j" "n" "r"
[2,] "c" "g" "k" "o" "s"