Rのバージョンアップにともなう不具合の修正
Closed this issue · 13 comments
今までwaningで済んでいたものがerrorになるようになったので、その対応をしないといけない
https://stackoverflow.com/questions/72848442/r-warning-lengthx-2-1-in-coercion-to-logical1
また、ほかにも廃止予定の機能についてできるだけwaningが出ないように修正
このissue、vpa関数にも関係しますか? R4.3.0(Win), R4.2.3(Mac)で、去年まで動いていたコードが↓のエラーが出るようになりました。結果は返ってきてるのですが、あっているのか不安です。
Error in if (link == "log") res <- log(res, base = base) :
the condition has length > 1
「結果は返ってきてる」というのがよくわからないのですが、(エラーがあると結果は返ってこないはず)もう少しくわしく、どんな状況になっているか教えていただけないでしょうか?linkという引数に何が入っているかとか?
説明不足で申し訳ありません。
linkの設定を変えたら、エラーが出なくなりました。計算結果もエクセルと一致しています。
link=c("id","id","id") → link="id"
ちなみに、vpa関数の別の引数
stat.tf=c("mean","mean","mean","mean","mean")でも↓のエラーが出ました。
Error in get(stat.tf) : first argument has length > 1
stat.tf="mean"に変えたら、計算できるようになりました。
c()で条件を並べるのがダメになったのでしょうか。
c()で条件を並べるのがダメになったのでしょうか。
ですね。
if文の中の括弧は基本的 TRUE または FALSEの一つの値だけが引数として与えられるべきなんですが、今まではベクトルで与えていてもwaningが出るだけでなんとなく動いていたんですね、、。(多分ベクトルの一番最初のTRUE or FALSEで判断されていた) その状況を放置してしまっていたのが問題だったの申し訳ないです。
こちらVPA関数のところなので @mmitsuyoさん、上記の箇所のご対応、お願いしてもよろしいでしょうか?
そもそ linkとstat.tfという引数が複数のベクトルをとっても動くような挙動が想定されているのかどうかで対処が変わってくると思います。
(もともとベクトルを入れることが想定されていない仕様であれば、これらの引数にベクトルが与えられた時点でエラーを返すような assertthatを入れてください。そうでないなら、if文をforループで回して、、などの対応になるかと思います)
ご対応、よろしくお願いいたします。
なお、linkはtuning指標値のlink関数を指定する引数ということで、指標値ごとに違うlink関数を想定している場合はベクトルで入力することもありうるかもです。
↑ コードはそのようになっていなかったので、新機能を追加するってことになりますね(今まではベクトルで入れて、動いているように見えていてもちゃんと動いていなかった)。宮川さん、よろしくお願いします。
そうですか!新機能の追加となると、そこまでのニーズがあるか不安になってきました。こちらの周りは、全てidでしたので。必須の機能ではないかもしれないので、コード改修の大変さに応じて追加をご判断ください。
お疲れ様です.stat.tfに関しては,#688 (comment)
のスレッドにあるように2021年に年齢別で与えるのをやめて,年齢で同じとする統計量に変えたようでした.ので,そもそも一つだけ与える仕様にコードはなっていたのに,今まではベクトルで入れていても,errorにならなかったのですね. ここは,引数にベクトルをいれた場合は,エラーを返すような仕様に変更したいと思います.
一方,linkは,vpa関数の中では,abund.extractor関数の中の引数として用いられていて,コードをみると,どの場合でもforループの中で一個一個扱うようになっているので,vpa関数の引数の中では,ベクトルとして与えて問題ないです.エラーはVPA関数の中のPlot=TRUEのときだけでていて,原因はplot_residual_vpa関数の中のabund.extractor関数の中のlinkの扱い方でした.
今から修正致します.
ご迷惑おかけしており申し訳ありません.
問題点のご説明、ありがとうございました。stat.tfはベクトルは使わないでおきます。linkについては、計算自体はできていたということで、安心しました。コードの修正、よろしくお願いいたします。
frasyrのメンテナンスをありがとうございます。
このissue #809 に微妙に関係する部分で、rvpa()
のuse.indexを"all" 以外で指定した場合に、下記のような警告を出す仕様に変更いただくことは可能でしょうか。link引数も関係していますので、ご検討のほどお願い申し上げます。
木下さん,ありがとうございます.
use.indexがall以外のときの仕様まで頭が回っていませんでした.
ご助言ありがとうございます.
そのような警告があったほうが,確実だと思います.フォローありがとうございます.
そのままプルリクだしていただくのがよいかと思いますが,こちらで同様に修正したほうがよいですか?
@JK-junkin さま,
プルリク,ご助言ありがとうございます.
大変助かります