管道后面跟着.var进入函数,为什么这不起作用?
有人能告诉我为什么示例1不起作用而示例2起作用吗? (我将数据集导入均值函数,但只需要一个变量, 但如果我先进行选择并将结果导入管道,则没有问题) NA管道后面跟着.var进入函数,为什么这不起作用?,r,dplyr,magrittr,R,Dplyr,Magrittr,有人能告诉我为什么示例1不起作用而示例2起作用吗? (我将数据集导入均值函数,但只需要一个变量, 但如果我先进行选择并将结果导入管道,则没有问题) NA 警告消息: 默认值(.$萼片长度): 参数不是数字或逻辑:返回NA 如果你解开你的代码管道 iris %>% mean(.$Sepal.Length) 变成 mean(iris, iris$Sepal.Length) 本质上,您正试图将mean应用于data.frame,但没有方法这样做 非管道的等效物 iris %>% .$S
警告消息:
默认值(.$萼片长度):
参数不是数字或逻辑:返回NA
如果你解开你的代码管道
iris %>% mean(.$Sepal.Length)
变成
mean(iris, iris$Sepal.Length)
本质上,您正试图将mean
应用于data.frame
,但没有方法这样做
非管道的等效物
iris %>% .$Sepal.Length %>% mean()
是
还有一种数值向量的平均值方法
请记住,在管道中,管道左侧的整个对象被传递到右侧的第一个参数(除非另有arg=。
表示)。尝试只传递对象的一部分往往不会很好地工作。如果您取消管道化代码
iris %>% mean(.$Sepal.Length)
变成
mean(iris, iris$Sepal.Length)
本质上,您正试图将mean
应用于data.frame
,但没有方法这样做
非管道的等效物
iris %>% .$Sepal.Length %>% mean()
是
还有一种数值向量的平均值方法
请记住,在管道中,管道左侧的整个对象被传递到右侧的第一个参数(除非另有arg=。
表示)。试图只传递对象的一部分往往效果不太好。您可以使用summary
应用函数,即iris%>%summary(val=mean(Sepal.Length))%>%。$val
谢谢@akrun,但我实际上并没有想办法将均值函数应用到我的数据帧中,第二部分是,但是想知道为什么版本1不起作用,而版本2不起作用,我猜它是在计算$Sepal.Length
和mean
之前对向量
或矩阵
起作用。您还可以检查iris%>%mean()
这是一个有趣的想法@akrun!实际上,带有iris%>%mean()
的错误消息看起来是一样的。所以求值的顺序是先平均,然后是点?@akrun我打赌在中没有必要使用,
,但是没有R来测试。你可以使用摘要
来应用函数,即虹膜%>%摘要(val=平均值(萼片长度))%>%。$val
谢谢@akrun,但我并不是在寻找一种将均值函数应用于我的数据帧的方法,第二部分是这样的,而是想知道为什么版本1不起作用,而版本2不起作用。我想它是在$Sepal.Length
和mean
对向量或矩阵起作用之前计算均值的。您还可以检查iris%>%mean()
这是一个有趣的想法@akrun!实际上,带有iris%>%mean()
的错误消息看起来是一样的。因此,评估的顺序是先平均,然后是点?@akrun我打赌在中没有必要使用,
,但没有R进行测试。对,在magrittr样式的管道中,它可能是虹膜%$%Sepal.Length%>%平均值
哦,我多么喜欢magrittr
。我需要更多地学习使用%%$%
。(我因使用iris%%>%%
$(萼片长度)而有罪)`%%>%mean`,这看起来太错误了。谢谢@Benjamin!有点奇怪,%%.$var
被表示为df,df$var
。我经常求助于magrittr,@docendodiscimus来完成这类操作,但这会破坏命令链中的流程:df%%>%filter(df)%%>%select(df)%%$%mean(var)
没错,在magrittr风格的管道中,它可能是虹膜%$%Sepal.Length%%>%意思是哦,我多么喜欢magrittr
。我需要学会更多地使用%$%
。(我对使用虹膜%>%
$(Sepal.Length)感到内疚)`%%>%mean`,这看起来太错误了。谢谢@Benjamin!有点奇怪,%%.$var
被表示为df,df$var
。我经常求助于magrittr,@docendodiscimus来完成这类操作,但这会破坏命令链中的流程:df%%>%filter(df)%%>%select(df)%%$%mean(var)