我了解到应该避免使用 attach。并改为使用 with() 。 然而,有时这似乎并不是所有情况下的解决方案。
我需要创建几个新变量(矩阵),这些变量是根据 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
我想避免繁琐/冗余地使用“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
确实是重复相同的操作,相同的设置,但功能不同。
你知道如何克服代码的复杂使用吗
最佳答案
在数据框环境中创建变量时,请使用 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
关于R - 使用 with() 从数据帧创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42884279/