当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R with 评估数据环境中的表达式


R语言 with 位于 base 包(package)。

说明

评估一个R在由数据构建的环境中的表达式,可能会修改原始数据(的副本)。

用法

with(data, expr, ...)
within(data, expr, ...)
## S3 method for class 'list'
within(data, expr, keepAttrs = TRUE, ...)

参数

data

用于构建环境的数据。对于默认的 with 方法,这可以是环境、列表、数据帧或整数,如 sys.call 中所示。对于 within ,它可以是列表或 DataFrame 。

expr

要评估的表达式;特别是对于 within() 通常是 “compound” 表达式,即形式

   {
     a <- somefun()
     b <- otherfun()
     .....
     rm(unused1, temp)
   }
keepAttrs

对于 within()list 方法, logical 指定结果列表是否应保留 data 中的 attributes 并使其 names 保持相同的顺序。通常这是不需要的,因为无论如何结果都是一个命名列表,然后 keepAttrs = FALSE 更有效。

...

要传递给(未来)方法的参数。

细节

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

也可以看看

evalqattachassigntransform

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Evaluate an Expression in a Data Environment。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。