变维R-数组
我有个奇怪的问题 本质上,我有一个函数,它接受一个维度为Nx(2k)的数据帧,并将其转换为一个维度为Nx2xk的数组。然后,我在函数中的不同位置进一步使用该数组 我的问题是,当k==2时,我只剩下一个Nx2阶的矩阵,更糟糕的是,如果N=1,我只剩下一个1x2阶的矩阵 我想写变维R-数组,r,multidimensional-array,R,Multidimensional Array,我有个奇怪的问题 本质上,我有一个函数,它接受一个维度为Nx(2k)的数据帧,并将其转换为一个维度为Nx2xk的数组。然后,我在函数中的不同位置进一步使用该数组 我的问题是,当k==2时,我只剩下一个Nx2阶的矩阵,更糟糕的是,如果N=1,我只剩下一个1x2阶的矩阵 我想写myArray[thisRow,,]来选择数组的那一部分,但是对于N=1,k=2的情况,这是不够的。我尝试了myArray[thisRow,,,drop=FALSE],但出现了“维数不正确”的错误。同样的问题也出现在Nx2案例
myArray[thisRow,,]
来选择数组的那一部分,但是对于N=1,k=2的情况,这是不够的。我尝试了myArray[thisRow,,,drop=FALSE]
,但出现了“维数不正确”的错误。同样的问题也出现在Nx2案例中
这个问题是否有解决办法,或者我是否需要将代码分解成案例
示例代码如下所示:
thisFunction <- function(myDF)
{
nGroups = NCOL(myDF)/2
afMyArray = myDF
if(nGroups > 1)
{
afMyArray = abind(lapply(1:nGroups, function(g){myDF[,2*(g-1) + 1:2]}),
along = 3)
}
sapply(1:NROW(myDF),
function(r)
{
thisSlice = afMyArray[r,,]
*some operation on thisSlice*
})
}
this函数1)
{
afMyArray=abind(lappy(1:n组,函数(g){myDF[,2*(g-1)+1:2]}),
沿=3)
}
sapply(1:NROW(myDF),
功能(r)
{
thislice=afMyArray[r,,]
*在这个切片上进行一些操作*
})
}
谢谢
James你能把你的函数代码贴出来吗?如果我们能看到它是什么样子的话,它将帮助我们回答你的问题。另外,我建议使用*来表示乘法,而不是“x”,因为它可能会与变量混淆。我不确定您在做什么,但
xc您能控制输入吗?使用[…,drop=FALSE]
可以防止1x2矩阵简化为向量。@WillBeason,*不是表示乘法,而是定义矩阵的维数。另外,提供的示例代码我已经解决了这个问题。谢谢你的提示