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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。