R programming エラー集

Rprogrammingにおけるエラー集とその対応を集めています。
エラーは英語で検索すれば解決することが殆どなのですが、日本語話者の方にもスムーズに解決できるようにエラー集を集めてみました。
自分が躓いて来た道が滑らかになりますように…。

・エラー: $ operator is invalid for atomic vectors

ベクトル表記なので先に進めません
データ型が原因の事が多く、data.frame()関数などを使用してデータ型を変更しましょう

・gowerDind(as.matrix(data.x), as.matrix(data.y), weights[weightind], でエラー:
関数 ’Rcpp_precious_remove’はパッケージ’Rcpp’では提供されていません

こちらは多重代入法の一種であるkNN imputationを用いる時に出たエラーです
VIM::kNNの関数を用いる際にこのようなエラー表記が出ました
この場合はRのバージョン、もしくはRcppパッケージのバージョンの問題があります
自分の場合はRcppパッケージのreinstallで解決できました

この場合に限らず、対象パッケージに提供されていない、という場合にはバージョンの違いが隠れていることが多いので、R自体またはパッケージのアップデートを行いましょう

replace==FALSE, but there are more (weighted) treated obs than control obs. Some treated obs will not be matched. You may want to estimate ATC instead.

コントロール群に対して治療群が多過ぎます
このエラーは以下のような場合で起きます
治療群(=1)が5万人に対してコントロール群(=0)が3000人と少ないです

R propensity score matching
R propensity score matching

このような場合に治療群の母集団を正確に反映する可能性が高まるため、replace==TRUEにしてコントロール群を複数回使う選択肢があります

Matching::Match(Tr =… でエラー:
Treatment indicator (‘Tr’) must be a logical variable—i.e., TRUE (1) or FALSE (0)

Tr(治療群)が1,0の論理変数ではありません
何故かas.factorが通用せず、integer型から変換できませんでした ※ 未解決
ただ言われたとおりにas.logicalで論理型に変更することでクリアできました

・エラー: サイズ 17.8 Gb のベクトルを割り当てることができません
追加情報: 警告メッセージ:
Dropped unused factor level(s) in dependent variable:

kNNimputation(VIM::kNN)を使用した際に出現しました
kNNimputationはK近傍法と言われ、簡単に言うとベクトル距離が近い集団を集めてその値を代入する多重代入法の一種です
多数のファクター型変数の存在によりベクトル距離が離れてしまった事が原因のエラーと考えられます
ファクター型へ未分類な行がある、IDが途中行に入ってしまっている(1行目の場合は自動認識してくれます)などの原因が考えられるためそれに対処しましょう

・error:1407742E:SSL

GitHubのセキュリティ強化のためのアップデートにより起きています。GitHubのバージョンアップデートをしましょう
自分の場合はRからGitHubのコードを呼びだす時に出現したのでコードをべた貼りして解決しました

・eval(family$initialize) でエラー: y values must be 0 <= y <= 1

ロジスティック回帰分析で出ました
目的変数yが0から1の値に収まっていないのでエラー値がないかを見直してみましょう

・weights * y でエラー: 二項演算子の引数が数値ではありません

ロジスティック回帰分析(binomial)において目的変数yがcharacterの際に出ました
数値型、factor型に変更することで改善しました

・group_byからのsummarise関数を適応する際にID列を認識しない

data = data.frame(aa = c(“a”, “b”, “c”, “a”), bb = c(“aaa”, “aaa”, “aba”, “ccc”))
data %>% group_by(aa) %>% summarise(sumtxt = paste0(bb, collapse = “,”))
sumtxt
1 aaa,aaa,aba,ccc

group_by summarise 関数 R エラー ID paste

・列同士を結合し、各行に新たな列を生成したい場合にやりがちなミス

本来は区切りを指定する際にsep=””を使わねばなりません
良く調べずにcollapase=””で区切りを指定してしまうと全てのベクトルを結合することになるので
結合する列の全行の中身のデータが結合されて排出されます
とてつもなく重いデータとなるのでRといえど下手すると落ちるレベルです
間違えないようにしましょう

paste 上手くいかない error

Caused by warning: ! The `…` argument of `across()` is deprecated as of dplyr 1.1.0. Supply arguments directly to `.fns` through an anonymous function instead. # Previously across(a:b, mean, na.rm = TRUE) # Now across(a:b, \(x) mean(x, na.rm = TRUE))

このエラーは匿名関数の使用を推奨する流れが原因です

匿名関数とは?
匿名関数は、名前を持たない関数を指します。Rでの従来の匿名関数の書き方は以下のようになります。


function(x) x + 1
この関数は、入力に1を加えるだけのシンプルな関数ですが、この関数に名前を付けずに使用する場合、それを匿名関数と呼びます。

しかし、(x) の記法を使用することで、前述の匿名関数は以下のようにシンプルに書けるようになります。


(x) x + 1
この新しい記法のメリットは、簡潔さと可読性にあります。特に、dplyrのようなパイプラインを多用する作業では、この新しい記法はコードを大幅にシンプルにすることができます。

なぜこの記法が必要か?
dplyrのacross()関数など、いくつかの関数では複数の引数を受け取る関数を適用する場面があります。従来のacross()の使い方では、第二引数以降に関数に渡す追加の引数を直接指定していましたが、この方法は非推奨となり、代わりに匿名関数を使って関数の引数を指定する形式に変更が求められています。

この変更は、関数の適用の挙動をより明確にするためのもので、同時にコードの可読性も向上させています。

タグ: ,