with
位于 base
包(package)。 说明
评估一个R在由数据构建的环境中的表达式,可能会修改原始数据(的副本)。
用法
with(data, expr, ...)
within(data, expr, ...)
## S3 method for class 'list'
within(data, expr, keepAttrs = TRUE, ...)
参数
data |
用于构建环境的数据。对于默认的 |
expr |
要评估的表达式;特别是对于 { a <- somefun() b <- otherfun() ..... rm(unused1, temp) } |
keepAttrs |
对于 |
... |
要传递给(未来)方法的参数。 |
细节
with
是一个通用函数,它在由 data
构造的本地环境中计算 expr
。该环境以调用者的环境作为其父环境。这对于简化对建模函数的调用很有用。 (注意:如果 data
已经是一个环境,那么它将与其现有的父环境一起使用。)
请注意,expr
中的分配发生在构建的环境中,而不是在用户的工作空间中。
within
类似,只是它在评估 expr
后检查环境并对 data
的副本进行相应的修改(如果创建的对象无法存储在数据帧中,则在数据帧情况下这可能会失败) DataFrame ),并返回它。 within
可以用作 transform
的替代品。
值
对于 with
,评估的值 expr
。对于 within
,修改后的对象。
注意
对于交互式使用,这是非常有效且易于阅读的。然而,对于编程,即在一个函数中,需要更加小心,通常应避免使用 with()
,因为例如 data
中的变量可能会意外覆盖局部变量,请参阅引用。
此外,当使用带有显式 data
参数的建模或图形函数(通常使用 formula
)时,通常首选使用该函数的 data
参数,而不是使用 with(data, ...)
。
例子
with(mtcars, mpg[cyl == 8 & disp > 350])
# is the same as, but nicer than
mtcars$mpg[mtcars$cyl == 8 & mtcars$disp > 350]
require(stats); require(graphics)
# examples from glm:
with(data.frame(u = c(5,10,15,20,30,40,60,80,100),
lot1 = c(118,58,42,35,27,25,21,19,18),
lot2 = c(69,35,26,21,18,16,13,12,12)),
list(summary(glm(lot1 ~ log(u), family = Gamma)),
summary(glm(lot2 ~ log(u), family = Gamma))))
aq <- within(airquality, { # Notice that multiple vars can be changed
lOzone <- log(Ozone)
Month <- factor(month.abb[Month])
cTemp <- round((Temp - 32) * 5/9, 1) # From Fahrenheit to Celsius
S.cT <- Solar.R / cTemp # using the newly created variable
rm(Day, Temp)
})
head(aq)
# example from boxplot:
with(ToothGrowth, {
boxplot(len ~ dose, boxwex = 0.25, at = 1:3 - 0.2,
subset = (supp == "VC"), col = "yellow",
main = "Guinea Pigs' Tooth Growth",
xlab = "Vitamin C dose mg",
ylab = "tooth length", ylim = c(0, 35))
boxplot(len ~ dose, add = TRUE, boxwex = 0.25, at = 1:3 + 0.2,
subset = supp == "OJ", col = "orange")
legend(2, 9, c("Ascorbic acid", "Orange juice"),
fill = c("yellow", "orange"))
})
# alternate form that avoids subset argument:
with(subset(ToothGrowth, supp == "VC"),
boxplot(len ~ dose, boxwex = 0.25, at = 1:3 - 0.2,
col = "yellow", main = "Guinea Pigs' Tooth Growth",
xlab = "Vitamin C dose mg",
ylab = "tooth length", ylim = c(0, 35)))
with(subset(ToothGrowth, supp == "OJ"),
boxplot(len ~ dose, add = TRUE, boxwex = 0.25, at = 1:3 + 0.2,
col = "orange"))
legend(2, 9, c("Ascorbic acid", "Orange juice"),
fill = c("yellow", "orange"))
参考
Thomas Lumley (2003) Standard nonstandard evaluation rules. https://developer.r-project.org/nonstandard-eval.pdf
也可以看看
相关用法
- R withVisible 返回值及其可见性
- R warning 警告信息
- R which 哪些指数是正确的?
- R weekdays 提取 POSIXt 或日期对象的部分内容
- R write 将数据写入文件
- R writeLines 将行写入连接
- R which.min Min() 或 Max() 或第一个 TRUE 或 FALSE 在哪里?
- R warnings 打印警告消息
- R file.path 构造文件路径
- R grep 模式匹配和替换
- R getwd 获取或设置工作目录
- R vector 向量 - 创建、强制等
- R lapply 对列表或向量应用函数
- R dump R 对象的文本表示
- R Sys.getenv 获取环境变量
- R rank 样本排名
- R getDLLRegisteredRoutines DLL 中 C/Fortran 例程的反射信息
- R pushBack 将文本推回连接
- R strsplit 分割字符向量的元素
- R seq.Date 生成规则的日期序列
- R invisible 将打印模式更改为不可见
- R noquote “无引号”字符串打印类
- R rapply 递归地将函数应用于列表
- R basename 操作文件路径
- R formals 访问和操纵形式参数
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Evaluate an Expression in a Data Environment。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。