[解決済み】Rで、以下のエラーが発生しました。"attempt to replicate an object of type 'closure'"."
質問
データセットを受け取り、その環境に読み込まれたデータセットでplot()関数を出力するR関数を書こうとしています。 これはもうattach()を使う必要がないことを意味し、良い方法だと思います。 以下は私の例です。
mydata <- data.frame(a = rnorm(100), b = rnorm(100,0,.2))
plot(mydata$a, mydata$b) # works just fine
scatter_plot <- function(ds) { # function I'm trying to create
ifelse(exists(deparse(quote(ds))),
function(x,y) plot(ds$x, ds$y),
sprintf("The dataset %s does not exist.", ds))
}
scatter_plot(mydata)(a, b) # not working
以下は、私が受け取ったエラーです。
エラー in rep(yes, length.out = length(ans)) : タイプ 'closure' のオブジェクトを複製しようとしました。
他のバージョンもいくつか試しましたが、すべて同じエラーになります。 何が間違っているのでしょうか?
EDIT: あまり実用的でないコードであることは承知しています。 私の目標は、関数型プログラミングをもっと理解することです。 SASで似たようなマクロを書いたので、Rでその対になるものを書こうとしていたところですが、失敗しています。 例としてこれを選んだだけです。 かなり単純な例だと思うのに、うまくいかないんです。
どのように解決するのですか?
小さな問題がいくつかあります。
ifelse
はベクトル化された関数ですが、必要なのは単純な
if
. 実際には、このように
else
-- データセットが存在しない場合は、ただちにエラーを投げるようにすればよいのです。 エラーメッセージはオブジェクトの名前を使用していないので、独自のエラーを作成することに注意してください。
を渡しています。
a
と
b
ではなく
"a"
と
"b"
. の代わりに
ds$x
構文を使用する必要があります。
ds[[x]]
の構文は、プログラミングをするときに (
fortunes::fortune(312)
). もし、そのような方法で関数を呼び出したいのであれば、それらの引数もデパイスする必要があります。 最後に、あなたが欲しいのは
deparse(substitute())
ではなく
deparse(quote())
scatter_plot <- function(ds) {
ds.name <- deparse(substitute(ds))
if (!exists(ds.name))
stop(sprintf("The dataset %s does not exist.", ds.name))
function(x, y) {
x <- deparse(substitute(x))
y <- deparse(substitute(y))
plot(ds[[x]], ds[[y]])
}
}
scatter_plot(mydata)(a, b)
関連
-
[解決済み】R: 複数行の ggplot2 コマンドで「単項演算子エラー」が発生する。
-
[解決済み] 不適合な配列のコードエラー
-
[解決済み] 変数の型(リスト)が無効です
-
[解決済み] テスト
-
[解決済み】Rヒストグラムの範囲エラー:いくつかの'x'がカウントされない; 'break'が'x'の範囲に及ばないかもしれない
-
[解決済み】二項演算子への非数値引数【非公開
-
[解決済み】Rはプロットするが、アブラインを描画しない
-
[解決済み】.External.graphics Rでエラーが発生しました。
-
[解決済み] クロージャ」と「ラムダ」の違いは何ですか?
-
[解決済み] PHPでは、クロージャとは何ですか?なぜ "use "識別子を使用するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】数学関数への非数値引数
-
[解決済み】「次のオブジェクトは 'package:xxx' からマスクされています」とはどういう意味ですか?
-
[解決済み】エラー。Rの'break'の数が無効
-
[解決済み】RでKNN。trainとclassは長さが違う」?
-
[解決済み】ロジスティック回帰 - eval(family$initialize) : y 値は 0 <= y <= 1 である必要があります。
-
[解決済み】Rはプロットするが、アブラインを描画しない
-
[解決済み】 .subset2(x, i, exact = exact)のエラー:Rの添え字が範囲外である。
-
[解決済み】R4DSのエラー比較(1)は、アトミック型とリスト型でのみ可能です
-
[解決済み】seq_alongはうまくいくが、seqが意図しない結果を生む例とは?
-
[解決済み】起動時にパーをデフォルト値にリセットする方法