web-dev-qa-db-ja.com

Rエラー:names()が非ベクトルに適用されました

初めて実行したときにのみエラーを生成するコードの塊があります。奇妙なことに、2回目に実行してもエラーは発生しません(クレイジー定義?)。また、エラーは常に同じ位置に表示されるわけではありません。数行のコメントを追加すると、特定の指示ではなくコメントの後にエラーメッセージが出力されます。

エラーの正確な原因がわからないため、再現可能な例を提供できません。エラーは次のとおりです。

_Error in names(frame)[names(frame) == "x"] <- name : 
  names() applied to a non-vector
_

私のコードには、少なくとも明示的にnames()関数がないことを指定する必要があります。

20
Manfredo

これはトリッキーなエラーです。その理由を突き止めることができたのですが、Rにはキャッシュされた関数と同じ名前のオブジェクトがあるようです。これは、RStudioなどのIDEを使用してView(df)のタブを使用する場合に発生します。タブを閉じない限り、コードなしで関数を実行してもこのエラーが発生します。すべてのオブジェクトを削除したり、ガベージコレクションを実行したりしても解決されず、タブが閉じられるとエラーはなくなります。

私は同じエラーがあり、それは私が書いた特定の機能に障害がありました。関数内のすべてのコードをコメントアウトした場合でも、関数をロードするたびにエラーがスローされました。関数の変数名を変更するとエラーが停止することがわかりました。私の唯一の推測は、奇妙な変数名の競合があるということです。

2
JMT2080AD

同じエラーが発生しました。その理由は、「df」という名前でかなり前に保存したファイルに関連するもので、現在の変数(dfとも呼ばれます)に干渉しています。

ただし、解決策は単純です。コードの最初の行を実行し、グローバル環境をクリアしてから再度実行することにより、問題のある行を見つけます。エラーが発生しない場合は、エラーが発生するまで次の行を追加します。次に、その行の変数の名前を変更します。

0
Rudi Mueller

私も同じエラーが発生しました。私の場合の理由は、関数内に関数と同じ名前の別のデータフレームがあったことです。型の不一致がある場合にも、Rはこのエラーをスローすると思います。私の場合、名前は最初に関数として読み込まれました。 Rが再び同じ名前に出会ったとき、それは関数を探していましたが、代わりにデータフレームを見つけました。

私がしなければならなかったのは、そのうちの1つの名前を変更するだけで、エラーはなくなりました。

0
Abhijith

このエラーは、remove(list = ls())を使用してすべてを削除しようとするたびにコードに表示されます。私の場合、問題はdf (datatype = data.frame)という名前のオブジェクトがあり、Viewの以前のバージョンのdfも開いていたことでした。 Viewを閉じた後、エラーは消えました。

0
Alex