1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】データフレームで関数を適用する場合、dim(X)は正の長さでなければならない

2022-01-10 16:10:43

質問

データフレームのカラムに、以下のように関数を適用したい。

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

解決方法は?

Rが強制的に last_visit[,2] を無次元ベクトルに変換するのに対し apply は、オブジェクトが何らかの次元を持っていることを期待します。この強制を防ぐには drop=F をコマンドに追加してください。

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

もう一つの方法は、単に lapply または sapply をベクトル上に配置します。

lapply(last_visit[,2], best_recom)