如何解决在R中,x [withx,orderx $ CHROM,]和x [orderx $ CHROM,]有什么区别
我尝试了两个命令,它们返回相同的结果,我只想知道两个R命令之间可能有什么区别:
x[with(x,order(x$CHROM)),]
x[ order(x$CHROM),]
可以在线运行的示例是: https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/with
mtcars[with(mtcars,order(mtcars$cyl)),]
mtcars[ order(mtcars$cyl),]
解决方法
我认为第一个命令应该是:
mtcars[with(mtcars,order(cyl)),]
第二个是:
mtcars[order(mtcars$cyl),]
它们两者都返回相同的结果,并且是相等的,但是,使用with
的好处是,在引用列名称时不必一次又一次引用数据框名称。
假设您要按3个变量排序。使用with
可以做到:
mtcars[with(mtcars,order(cyl,am,vs)),]
并且没有with
:
mtcars[order(mtcars$cyl,mtcars$am,mtcars$vs),]
您可以选择使用什么,但是它们都返回相同的结果:
identical(mtcars[with(mtcars,],mtcars[order(mtcars$cyl,])
#[1] TRUE
,
没有真正的区别。 with
是一种便利功能。
示例1
您可以这样做
iris[order(iris$Species),]
请注意,您必须使用Species
分隔符来引用$
列。使用with
,我们可以改为:
with(iris,iris[order(Species),])
从最终用户的角度来看,以上内容与执行此操作基本相同:
attach(iris)
iris[order(Species),]
detach(iris)
我们应该避免使用attach
-我只是在这里出于教学目的显示它-因为它经常导致名称空间/作用域的头痛(可用的变量-例如,如果您有一个名为Species
的变量,并执行了以上的attach()
调用,将发生命名冲突)。使用with
可以避免这种情况,同时仍然可以避免在任何地方使用$
。
示例2
您可以写:
plot(iris$Petal.Width,iris$Petal.Length)
但与:
with(iris,plot(Petal.Width,Petal.Length))
在这些小示例中,使用with
并不会带来太大收益。但是,如果您要进行更复杂的函数调用,而这些函数调用经常引用数据帧的不同列,那么with
会派上用场。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。