我知道应该避免使用附件。并与()代替使用。 但是,有时似乎在所有情况下都不是解决方案。
我需要创建几个新的变量(矩阵),从data.frame中的一个和相同的值中包含:
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
我想避免繁琐/多余使用&#34; data.frame $&#34;
但这不起作用:
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 :(得分:2)
使用within()
代替with
。
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
答案 1 :(得分: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
<<-
函数会执行此操作。