1

繰り返しのことに対するRの答えは、通常apply()、ループではなく「」であると理解しています。私が頻繁に作成する厄介なコードに対して、より良いRデザインパターンはありますか?

したがって、HTMLから表形式のデータを取得するには、通常、データ型を変更し、このようなものを実行して、最初の列を日付形式(10進数から)に変換し、列2〜4をコンマ千区切り記号付きの文字列から変換する必要があります。 「2,400,000」から数値「2400000」のように。

X[,1] <- decYY2YY(as.numeric(X[,1]))
X[,2] <- as.numeric(gsub(",", "", X[,2]))
X[,3] <- as.numeric(gsub(",", "", X[,3]))
X[,4] <- as.numeric(gsub(",", "", X[,4]))

ここで左側とライドサイドの両方でX[、number]が繰り返されていることや、基本的に同じステートメントが2〜4回繰り返されていることは好きではありません。

X [、2]の反復性を減らしながら、ループのない非常にRスタイルの方法はありますか?「これを列2、3、4に適用する---現在の列を変更されたバージョンに再割り当てする関数?」というようなものがあります。

繰り返し可能なクリーニング関数全体を作成したくはありません。実際には、これをより少ない繰り返しで実行する簡単な無名関数です。

4

2 に答える 2

5

X がデータ フレームであると仮定すると、次のようになります。

X[2:4] <- lapply(X[2:4], function (x) as.numeric(gsub(",", "", x)))
于 2012-04-03T20:15:17.560 に答える
2

何かのようなもの

comma2numeric <- function(x) { as.numeric(gsub(",","",x)) }
X[,2:4] <- apply(X[,2:4],2,comma2numeric)

スタートです。 transformは適切なインプレース変更イディオムですが、列番号ではなく名前で動作します。

編集済み:1行目に閉じ括弧がありません

于 2012-04-03T19:45:15.047 に答える