微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在R中,x [withx,orderx $ CHROM,]和x [orderx $ CHROM,]有什么区别

如何解决在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 举报,一经查实,本站将立刻删除。