首页 > 解决方案 > 在 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]))

标签: rdplyrsum

解决方案


点表示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 括起来来推翻这种行为。例如,等价于。rhslhsiris %>% subset(1:nrow(.) %% 2 == 0)iris %>% subset(., 1:nrow(.) %% 2 == 0)rhs1:10 %>% {c(min(.), max(.))}c(min(1:10), max(1:10))


推荐阅读