2017-03-19 20 views
3

添付を使わないでください。代わりにwith()を使用します。 ただし、すべてのケースで解決策ではないように見えることがあります。私はdata.frameの$」の負担/冗長な使用を避けたいR - with()withを使ってデータフレームから新しい変数を作成する

df1 <- data.frame(Var1=rnorm(50,5), Var2=rnorm(50,12)) 

q5 <- quantile(df1$Var1,.05, na.rm=TRUE)# lower quantile 
q95 <- quantile(df1$Var1,.95, na.rm=TRUE) # upper quantile 
medx <- median(df1$Var1, na.rm=TRUE) # median 
x.dens <- density(df1$Var1, na.rm=TRUE) # density 

:私は1とdata.frameで同じ値からcaclulatedいくつかの新しい変数(行列)を作成する必要があり

が、これは動作しません。確かに

with(df1, 
q5 <- quantile(Var1,.05, na.rm=TRUE),# lower quantile 
q95 <- quantile(Var1,.95, na.rm=TRUE), # upper quantile 
medx <- median(Var1, na.rm=TRUE), # median 
x.dens <- density(df1$Var1, na.rm=TRUE)) # density 

が、それは同じ設定で、繰り返し同じ操作であるが、異なる機能。

はあなたがデータフレーム環境で変数を作成するときに代わりにwithのコード

+0

代わりにwithを使用 – Sathish

+0

それを列として作成する前に、各出力の 'str'をチェックする方が良いです。例えば、あなたは '密度'出力を確認することができます – akrun

答えて

0

あなたがwithを使用してコードを含むあなたの「data.frameの$」と同じ結果をしたい場合は、明示的に地球環境に値を割り当てる必要があります(そうでない場合の値はデータ環境に割り当てられていないだろうされます返されます):

with(df1,{ 
    q5 <<- quantile(Var1,.05, na.rm=TRUE) # lower quantile 
    q95 <<- quantile(Var1,.95, na.rm=TRUE) # upper quantile 
    medx <<- median(Var1, na.rm=TRUE) # median 
    x.dens <<- density(df1$Var1, na.rm=TRUE)}) # density 

<<-の機能があります。

+0

それは素晴らしいです、私は<<について読んだ - しかし、私の場合にそれを使用する方法を見つけませんでした!ありがとうございました – Pharcyde

+0

'assign'関数はこれをより安全に行います。しかし、ほとんどの場合、 '<< - 'はショートカットです。@ Pharcyde – Feng

+0

'<< - 'は非ローカル演算子であり、副作用を引き起こす可能性があります。これは、データフレーム以外の環境で同じ変数を使用している場合は機能しません。これを試して、 'df'と' a'の出力を見てください。 – Sathish

2

使用within()の精巧な使用を克服する方法を知っていますか。

res <- within(df1, 
       q5 <- quantile(Var1,.05, na.rm=TRUE),# lower quantile 
       q95 <- quantile(Var1,.95, na.rm=TRUE), # upper quantile 
       medx <- median(Var1, na.rm=TRUE), # median 
       x.dens <- density(df1$Var1, na.rm=TRUE)) # density 

head(res) 
#  Var1  Var2  q5 
# 1 4.943871 12.29145 3.678482 
# 2 4.844204 11.55671 3.678482 
# 3 3.529248 12.00111 3.678482 
# 4 4.521850 12.07434 3.678482 
# 5 5.417942 11.41048 3.678482 
# 6 6.358680 11.43133 3.678482 
関連する問題