2016-07-28 19 views
2

文字列があり、別のオブジェクトと同じ型に変換したい。このオブジェクトはベクトルと見なすことができます。たとえば、文字列"50"とターゲットベクトル1:10がある場合、"50"を整数50に変換します。私は変換を行う一般的な方法があるのだろうかと思います。どのタイプを変換したいのか分かっていれば簡単です。私は数字にしたい場合はas.numeric()を使うことができます。文字列を別のオブジェクトと同じ型に変換する

この質問の背景は:ユーザーがテーブルの値を編集できるようにグラフィカルユーザーインターフェイスを提供したいと思います。彼らはセルを編集した後、文字列を取得し、元のデータ(通常は行列またはデータフレーム)を認識します。元のデータをこの新しい値で更新したいと思います。 valueは文字列なので、私は単にdata[i, j] <- valueを実行することはできません。

私はいくつかの一般的なタイプ(数値、文字、因子、日付など)を列挙し、as.*()を使用して変換を行うことができますが、既存のジェネリックアプローチ。日付(タイムゾーン、起点)と要因(新しいレベルを追加する可能性があります)については、少し難しいことがあります。

+0

これはおそらく、いくつかのケースでは失敗しますが、多分、 'モード(OBJ1)< - モード(obj2が) 'または' class(obj1)< - class(obj2) 'です。ここで、obj1はユーザー入力で、obj2は変更するオブジェクトです。 – lmo

+0

'モード< - 'も私の頭に最初に来たものですが、それは要因や日付のために動作しません。 –

+0

'class < - 'は日付で動作します(少なくとも 'class(obj1)< - class(as.Date(" 2001-10-10 "))')が動作します。変更されるオブジェクトのタイプに応じて、 'mode < - 'と 'class < - 'の間で何らかの分岐が発生する可能性がありますか? – lmo

答えて

1

(あなたは今ではこの問題を解決する方法を発見したかもしれないが、私はとにかく試してみるだろう...)

私はRのドキュメントをチェックし、base::as(object, Class)はそうする一般的な方法であることがわかりました。しかし、デフォルト強制変換メソッドは制限されています。現在は、CharacterクラスをDateクラスに強制するデフォルトのメソッドやFactorクラス(既存のメソッドをすべてmethods::showMethods("coerce"でチェックできます)はありません。ただし、カスタマイズされたメソッドをmethods::setAs()と設定できますが、それは私の能力を超えています。私の限られたプログラミングの知識を持つ

、私はおそらく、この問題に対処するには、次の方法を使用します。

assign_target_class = function (input_vector, target_vector){ 
    is.date = function(x) inherits(x, 'Date') 
    if (is.date(target_vector)) {vector_class <- 'Date'} 
    else if (base::is.factor(target_vector)) {vector_class <- 'Factor'} 
    else {vector_class <- class(target_vector)} 
    input_vector = as(input_vector, vector_class) 
    input_vector 
    } 

P.S.ターゲットベクトルの日付変数がまだ日として設定されていない場合は、代わりにこの引数でis.dateを置き換えることができます:

is.convertible.to.date <- function(x) !is.na(as.Date(as.character(x), 
    tz = 'UTC', format = '%Y-%m-%d')) 
+0

ありがとうございますが、 'as(*、 'Date')'と 'as(*、 'Factor')'は実際には機能しません。 –

関連する問題