应用函数于数据框时,dim(X)的长度必须为正数。

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

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

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)
}

就像这样:

apply(last_visit[,2], 1, best_recom)

但是我遇到了这个错误:

dim(X) must have a positive length

我已经尝试将其作为矩阵应用,如下所示:

apply(as.matrix(last_visit)[,2],1,recomenda_n_melhor)

但我收到了相同的错误。 使用的数据框如下:

result2 - 相似度矩阵 - 这只是一个示例

          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

2
你有检查过 dim(as.matrix(last_visit)[,2]) 吗? - user3710546
1个回答

38

这是因为 R 将 last_visit[,2] 强制转换为一个无维度向量,而 apply 函数期望对象具有某些维度。您可以通过在命令中添加 drop=F 来防止强制转换,例如:

apply(last_visit[,2,drop=F], 1, best_recom)

另一种方法就是在向量上使用lapplysapply

lapply(last_visit[,2], best_recom)

2
如果只有一列,就不需要使用lapply。直接执行best_recom(last_visit[,2])即可,对吧? - thelatemail
@thelatemail,我认为best_recom没有正确进行向量化。 - Marat Talipov
正如@MaratTalipov所提到的,R将返回单列/行的数据框默认转换为向量,在某些情况下这是不希望的;请参阅此处的帖子以获取详细解释:https://radfordneal.wordpress.com/2008/08/20/design-flaws-in-r-2-%E2%80%94-dropped-dimensions/#comments - Jerry T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接