Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为什么这些操作不能产生相同的结果?管道进入。(dot)_R_Magrittr - Fatal编程技术网

R 为什么这些操作不能产生相同的结果?管道进入。(dot)

R 为什么这些操作不能产生相同的结果?管道进入。(dot),r,magrittr,R,Magrittr,今天我在使用和%>%时遇到了一些我不太懂的东西。现在我不确定我是否理解这两个操作符 资料 但这个答案如此不同? 有人能给我解释一下管道操作器是如何根据使用情况实际工作的吗。我过去常常按照“去拿什么”的思路思考%%>%左边的内容 让我更加困惑的调查 我试图用print替换sum,看看到底发生了什么 # As Expected df[, .(Mean = mean(value)), by = .(id)] %>% .$Mean %>% print() [1] 0.5111589 0.76

今天我在使用
%>%
时遇到了一些我不太懂的东西。现在我不确定我是否理解这两个操作符

资料 但这个答案如此不同? 有人能给我解释一下管道操作器是如何根据
使用情况实际工作的吗。我过去常常按照“去拿什么”的思路思考
%%>%
左边的内容

让我更加困惑的调查 我试图用
print
替换
sum
,看看到底发生了什么

# As Expected
df[, .(Mean = mean(value)), by = .(id)] %>% .$Mean %>% print()
[1] 0.5111589 0.7698414 0.7475319 0.9919061 0.5089610
df[, .(Mean = mean(value)), by = .(id)] %>% print(.$Mean) %>% sum()
[1] 3.529399

# Surprised
df[, .(Mean = mean(value)), by = .(id)] %>% print(.$Mean)
    id      Mean
 1:  1 0.5111589
---             
 5:  3 0.5089610

# Same
df[, .(Mean = mean(value)), by = .(id)] %>% sum(print(.$Mean))
[1] 22.0588

# Utterly Confused
df[, .(Mean = mean(value)), by = .(id)] %>% print(.$Mean) %>% sum()
[1] 18.5294 #Not even the same as above??

编辑:看起来与data.table或其分组方式无关,与data.frame的问题相同:

x%.$x1%>%sum
# [1] 6
x%>%。$x2%>%总和
# [1] 15
#为什么??
x%>%总和(.$x1)
# [1] 27
x%>%总和(.$x2)
# [1] 36

更新后的简短示例很有帮助

正如我们所知,在使用管道时,第一个参数来自
LHS
(除非我们通过
{}
“停止”它),因此发生的情况是:

x %>% sum(.$x1)
#[1] 27
相当于

sum(x, x$x1)
#[1] 27
数据帧的完整总和与列
x1
相加


就原始示例而言,我们可以验证相同的行为

library(data.table)

temp <- df[, .(Mean = mean(value)), by = .(id)]
sum(temp, temp$Mean)
#[1] 22.0588
库(data.table)

温度
18.5294
的值可以比
22.0588
更好地解释;这是对完整数据集求和的结果,请参见:
df[,(Mean=Mean(value)),by=(id)]%%>%unlist()%%>%sum()
在第二个示例中
x%%>%pull(x1)%%>%sum()
也给出了预期的结果result@Jaap是的,在求和之前拉取或预选都可以。谢谢,
sum(x,x$x1)
现在很有意义,尤其是在需要指定第一个参数的函数的上下文中。
x <- data.frame(x1 = 1:3, x2 = 4:6)

sum(x$x1)
# [1] 6
sum(x$x2)
# [1] 15

x %>% .$x1 %>% sum
# [1] 6
x %>% .$x2 %>% sum
# [1] 15

# Why?
x %>% sum(.$x1)
# [1] 27
x %>% sum(.$x2)
# [1] 36
x %>% sum(.$x1)
#[1] 27
sum(x, x$x1)
#[1] 27
library(data.table)

temp <- df[, .(Mean = mean(value)), by = .(id)]
sum(temp, temp$Mean)
#[1] 22.0588