R 在数据帧中应用函数时,dim(X)必须具有正长度

R 在数据帧中应用函数时,dim(X)必须具有正长度,r,R,我正在尝试将此函数应用于数据帧列: best_recom <- function(x,n=1) { y <- result2[x,order(-result2[x,])[n]] inds = which(result2[x,] == y, arr.ind=TRUE) recom <- names(inds[1]) return(recom) } 但我得到了一个错误: dim(X) must have a positive length 我已经尝试将其作

我正在尝试将此函数应用于数据帧列:

best_recom <- function(x,n=1) {
   y <- result2[x,order(-result2[x,])[n]]
   inds = which(result2[x,] == y, arr.ind=TRUE)
   recom <- names(inds[1])
  return(recom)
}
但我得到了一个错误:

dim(X) must have a positive length
我已经尝试将其作为矩阵应用,如下所示:

apply(as.matrix(last_visit)[,2],1,recomenda_n_melhor)
但我也犯了同样的错误。 以下是所使用的数据帧:

结果2-相似矩阵-这只是一个样本

          X1.0      X1.1      X2.1      X3.1
X1.0     0.0000000 0.5000000 0.3872983 0.3162278
X1.1     0.5000000 0.0000000 0.2581989 0.0000000
X2.1     0.3872983 0.2581989 0.0000000 0.0000000
X3.1     0.3162278 0.0000000 0.0000000 0.0000000
最后一次访问

  customer  cat
1        1 X5.1
2        2 X6.1
3        3 X1.1
4        4 X2.1

这是因为R强制
最后一次访问[2]
为无量纲向量,而
apply
期望对象具有一些量纲。您可以通过在命令中添加
drop=F
来防止强制,即:

apply(last_visit[,2,drop=F], 1, best_recom)
另一种方法是在向量上使用
lappy
sapply

lapply(last_visit[,2], best_recom)

您是否检查了
dim(如.matrix(上次访问)[2])
?如果它只是一列,则不需要
lappy
。只要做
best\u recom(last\u visit[,2])
就行了吗?@最近的邮件,我认为
best\u recom
没有正确的矢量化。正如前面提到的@MaratTalipov一样,R会将返回的数据帧(默认情况下)转换为在某些情况下不需要的矢量;有关详细说明,请参见此处的帖子:
lapply(last_visit[,2], best_recom)