r - 在 rowSums 中使用点 (.)
问题描述
这可能是一个非常基本的问题,但似乎我很难理解 R 中的点 (.)。在下面的示例中,我使用rowSums
了两列的总和。但我不明白 rowSums 中点的作用。有人可以帮我理解这一点吗?
df1 <- data.frame(fruits = c("Apple", "Apple","Apple", "Mango", "Mango", "Kiwi", "Kiwi"),
prices1 = c(10, NA, NA, 15, NA, 20, NA), prices2 = c(NA, 12, NA, NA, 17, NA, 22),
prices3 = c(NA, NA, 14, NA, 21, NA, 25),
weights = c(20, 20, 20, 25, 25, 30, 30),
quality = c("Good", "Good", "Good", "Better", "Better", "Best", "Best"))
df1 %>% replace(is.na(.), 0) %>% mutate(sum = rowSums(.[2:3]))
解决方案
点表示df1 %>% replace(is.na(.), 0)
将评估的任何内容。点伴随%>%
,管。
从帮助页面:
help("%>%")
将 lhs 放在 rhs 调用中的其他位置
通常你会想
lhs
在第rhs
一个位置以外的另一个位置跟注。为此,您可以使用点 (.) 作为占位符。例如,y %>% f(x, .)
等价于f(x, y)
和z %>% f(x, y, arg = .)
等价于f(x, y, arg = z)
。
将点用于次要目的
通常,除了自身的值(例如行数或列数)之外,调用中还
lhs
需要 的某些属性或属性。在 rhs 调用中多次使用点占位符是完全有效的,但根据设计,在嵌套函数调用中使用它时行为会略有不同。特别是,如果占位符只在嵌套函数调用中使用,lhs 也将作为第一个参数放置!这样做的原因是,在大多数用例中,这会产生最易读的代码。例如,等效于但稍微更紧凑。可以通过将 in 括起来来推翻这种行为。例如,等价于。rhs
lhs
iris %>% subset(1:nrow(.) %% 2 == 0)
iris %>% subset(., 1:nrow(.) %% 2 == 0)
rhs
1:10 %>% {c(min(.), max(.))}
c(min(1:10), max(1:10))
推荐阅读
- vsvim - 如果我让 VS 或 VsVim 处理所有冲突的键绑定,行为会有什么不同?
- angular - 如何单独更新“BehaviorSubject”单个值
- sql - SQL - Oracle - 具有动态数据的数据透视表
- docker - 使用 Golang api 构建 docker 映像时复制失败
- node.js - For .. in Handlebars & Express-flash
- java - Spring 集成 Java DSL - 动态创建 IntegrationFlows
- angular - 用于按钮禁用属性更改的 Angular 5 侦听器或指令
- date - 时间序列索引elasticsearch范围日期查询url
- c++ - 用于检测英特尔跟踪分析器的 Visual Studio 项目设置
- sql-server - 尝试对空值运行计算时在 SSRS 中出现 #Error,尽管有 IfNothing 子句