Tibbleを関数呼び出しのパラメータリストに変換しようとしています。私がこれをやっている理由は、さまざまな列を持つ複数の固定幅ファイルを読み込むための単純なファイル指定Tibbleを作成したいからです。このようにして、プルとセレクトを使用してファイル内のカラムを指定するだけで、ファイルを自動的にロードして解析することができます。しかし、私は列の形式を指定するcolsオブジェクトを使用して問題に挑戦しています。Tibbleをパラメータリストに変換
> (filespec <- tibble(ID = c("Title", "Date", "ATTR"), Length = c(23, 8, 6), Type = c("col_character()", "col_date()", "col_factor(levels=c(123456,654321)")))
# A tibble: 3 x 3
ID Length Type
<chr> <dbl> <chr>
1 Title 23 col_character()
2 Date 8 col_date()
3 ATTR 6 col_factor(levels=c(123456,654321)
私はフォーマットのcolsのオブジェクトで終わるしたい:
> (cols(Title = col_character(), Date = col_date(), ATTR=col_factor(levels=c(123456,654321))))
cols(
Title = col_character(),
Date = col_date(format = ""),
ATTR = col_factor(levels = c(123456, 654321), ordered = FALSE)
)
私が読んだ他の質問から、この例では
は、私はフォーマットのTibbleを持っていると仮定することができます私はdo.callでこれができることを知っています。しかし、列IDと型を自動的にcolsオブジェクトに変換する方法を理解することはできません。ここに私が試したものの一例である...
> do.call(cols, select(filespec,ID, Type))
Error in switch(x, `_` = , `-` = col_skip(), `?` = col_guess(), c = col_character(), :
EXPR must be a length 1 vector
私はこれがどのように行われるか、マッピングをパラメータに行を行い、他の関数でラップすることが選択のニーズを想定していますか?
あなたは 'do.call'でこれを行うことができるかもしれませんが、あなたのコードはあなたが望むものを遠隔操作するものではありません - あなたは' do.call'が実際に何をするのかをまず理解する必要がありますそれを使用することができます。 –
私はRに新しいので、これはすべての学習経験です。私はdo.callが何をするのか理解していると思います。他のパラメータを引数として呼び出す関数です。下の答えに対する私のコメントによると、ここで私を逃れることは、自動化された方法で名前付きリストを作成する方法です。私はフィールド=タイプのパラメータをすべて手作業で入力する必要はありません、私は2つのカラムにそれらを持っています、私はちょうど私のために名前付きリストを作成したい。 – RandomString
はい、あなたは問題の説明に実際にスポットを当てています。あなたの質問から、あなたがこれを理解したようには見えなかった。しかし、この問題の部分は 'setNames'を使って実際に簡単に解決できます。別の大きな問題は、パラメータが文字列であり、コードではないということです。このように、最初に評価する必要がありますが、これが可能である間は(構文解析/評価)、それは面倒であり、おそらくそれはあなたのケースではうまくいかないかもしれません。ジョランのアプローチは優れています。 –