1

日付の列を持つフレームがあるとします。

test.frame$alt_dates <- c('2001-01-04', '2001-05-11', '2001-05-14', '2001-07-24', '2003-12-24', '2004-07-21', '2004-10-15', '2004-12-15', '2005-03-17', '2005-07-18')

彼らはキャラクターとして始まります。わかった:

class(test.frame$alt_dates)
[1] "character"

変換を使用してこれらの日付を日付にしようとすると、次のようになります。

transform(test.frame, alt_dates <- as.Date(alt_dates)

Rはフレームをコンソールに出力するだけです。列を直接変換すると、正常に機能します。

test.frame$alt_dates <- as.Date(test.frame$alt_dates)
class(test.frame$alt_dates)
[1] "Date"

Transformで何が間違っていますか?

更新:何人かの人々が気づいたように、私は結果を何にも割り当てていませんでした。これで、画面への印刷と変更の保存が行われないことが説明されます。しかし、結果をキャプチャしても機能しません。

test.frame <- transform(test.frame, more_dates <- as.Date(more_dates))
class(test.frame$more_dates)
[1] "character"
4

2 に答える 2

5

@Andrieと@StephanKolassaが言うように、結果を割り当てる必要があります。しかし、あなたはあなたの使用において別の間違いを犯しており、transformそれはこの文脈ではうまくいくが、他のほとんどの場合にはあなたを噛むでしょうこのコンテキストでは互換性がありません<-。で使用する=必要があります(この場合、テストデータフレームには1つの列しかないため、機能すると思います!)=transform

test.frame <- data.frame(alt_dates=c('2001-01-04', '2001-05-11', '2001-05-14', 
  '2001-07-24', '2003-12-24', '2004-07-21', '2004-10-15', '2004-12-15', 
  '2005-03-17', '2005-07-18'))
test.frame <- transform(test.frame,alt_dates=as.Date(alt_dates))
于 2012-11-29T20:50:43.840 に答える
1

transform()失敗しません。Rは値による呼び出しを使用します。つまり、関数への引数は値によってのみ転送されます。元のオブジェクトtest.frame$alt.datesは転送されません。したがって、関数への引数は関数によって変更できません。別の方法である参照による呼び出しでは、関数が外部スコープのパラメーターを変更できるようになります。Cなどの他のプログラミング言語では、参照による呼び出しは、メモリアドレスに「ポインタ」を渡すことによって行われます。Rにはありません。

transform()の結果を元のオブジェクトに割り当てるだけです。

于 2012-11-29T20:53:40.573 に答える