热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

何时使用'with'功能,为什么它好?

如何解决《何时使用'with'功能,为什么它好?》经验,为你挑选了2个好方法。

使用有什么好处with()?在帮助文件中,它提到它在从数据创建的环境中评估表达式.这有什么好处?创建环境并在那里评估它是否更快,而不是仅仅在全球环境中评估它?或者还有其他我想念的东西?



1> Gregor..:

with是没有data参数的函数的包装器

有许多函数可以处理数据框并采用data参数,因此每次引用列时都不需要重新键入数据框的名称.lm,plot.formula,subset,transform都只是几个例子.

with是一个通用的包装器,让你使用任何函数,就好像它有一个数据参数.

使用mtcars数据集,我们可以使用或不使用data参数来拟合模型:

# this is obviously annoying
mod = lm(mtcars$mpg ~ mtcars$cyl + mtcars$disp + mtcars$wt)

# this is nicer
mod = lm(mpg ~ cyl + disp + wt, data = mtcars)

但是,如果(对于一些奇怪的原因),我们想找到meancyl + disp + wt,还有一个问题,因为mean没有一个数据参数一样lm呢.这是with解决以下问题:

# without with(), we would be stuck here:
z = mean(mtcars$cyl + mtcars$disp + mtcars$wt)

# using with(), we can clean this up:
z = with(mtcars, mean(cyl + disp + wt))

包裹foo()with(data, foo(...))让我们使用任何功能foo ,就好像它有一个data说法-这是说我们可以用不带引号的列名,防止重复data_name$column_namedata_name[, "column_name"].

何时使用 with

使用with的交互并在[R脚本来节省打字,使您的代码更清晰.您需要为单个命令重新键入数据框名称的频率越高(数据帧名称越长!),使用的好处就越大with.

另请注意,with不限于数据帧.来自?with:

对于默认with方法,这可以是环境,列表,数据框或整数,如sys.call.

我不经常使用环境,但是当我这样做时,我发现with非常方便.

当您只需要一行结果时

正如@Rich Scriven在评论中所建议的那样,with当您需要使用类似的结果时,它会非常有用rle.如果您只需要一次结果,那么他的示例 with(rle(data), lengths[values > 1])允许您rle(data)匿名使用结果.

什么时候避免 with

当有一个data说法

许多具有data参数的函数在调用它时不仅仅使用它更简单的语法.大多数建模功能(如lm),以及许多其他(ggplot!)使用提供的功能做了很多data.如果您使用with ,而不是一的data说法,你会限制功能提供给您.如果有data参数,请使用data参数,而不是with.

添加到环境中

在上面的示例中,结果已分配给全局环境(bar = with(...)).要进行分配的内部列表/环境/数据,你可以使用within.(在这种情况下data.frames,transform也很好.)

在包中

不要with在R包中使用.有一个警告help(subset),可以适用于with:

警告这是一个便于交互使用的便利功能.对于编程,最好使用标准的子集函数[,特别是参数子集的非标准评估可能会产生意想不到的后果.

如果使用构建R包with,当您检查它时,您可能会收到有关在没有可见绑定的情况下使用变量的警告或注释.这将使CRAN无法接受包.

替代品 with

不要用 attach

许多(大多数是过时的)R教程用于attach避免通过使列可访问全局环境来重新键入数据框名称.attach被广泛认为是不好的做法,应该避免.附加的主要危险之一是,如果单独修改数据列,则数据列可能会不同步.with避免这个陷阱,因为它一次调用一个表达式.Stack Overflow上有很多很多问题,其中新用户正在关注旧教程并因此而遇到问题attach.简单的解决方案始终不使用attach.

一直使用with似乎太重复了

如果您正在执行许多数据操作步骤,您可能会发现自己开始使用每行代码with(my_data, ....你可能会认为这种重复几乎和不使用一样糟糕with.无论是data.tabledplyr封装提供非重复的语法高效的数据处理.我鼓励你学会使用其中一个.两者都有出色的文档.


使用`rle`时它也非常有用.您可以访问值而无需分配`rle`.示例:`with(rle(data),lengths [values> 1])`.无论如何,我发现它非常有用.

2> MrFlick..:

当我不想继续打字的时候我会用它dataframe$.例如

with(mtcars, plot(wt, qsec))

而不是

plot(mtcars$wt, mtcars$qsec)

前者查找wtqsecmtcarsdata.frame中查找.当然

plot(qsec~wt, mtcars)

更适合用于参数的情节或其他功能data=.


推荐阅读
  • 如何解决《C中数组中的关键字》经验,为你挑选了1个好方法。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文整理了Java中org.apache.pig.backend.executionengine.ExecException.<init>()方法的一些代码 ... [详细]
  • vb.net面试题,请大家帮忙,谢谢。如果需要讲详细一点,那就加我QQ531412815第4题,潜在的错误,这里的错误不是常规错误,属于那种只有在运行是才知道的错误:Catchex ... [详细]
  • AndroidStudio 2.3迁移3.0踩坑之——Could not resolve project
    参见StackOverflow如果你的项目引用了自己的库,在迁移到3.0后,编译就会报错。Error:Failedtoresolve:Couldnotresolveproject: ... [详细]
  • css div中文字位置_超赞的 CSS 阴影技巧与细节
    本文的题目是CSS阴影技巧与细节。CSS阴影,却不一定是box-shadow与filter:drop-shadow,为啥?因为使用其他属性 ... [详细]
  • 异常常见类型AssertionError断言语句失败(assert后的条件为假)AttributeError访问的对象属性不存在lmportError无法导入模块或者对象,主 ... [详细]
  • 这篇文章主要讲解了“怎么用Python写一个电信客户流失预测模型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入, ... [详细]
  • 一.元祖类型 (tuple)1.什么是元祖?用途:用于存放多个值,当存放的多个值只有读的需求没有改变的需求时,用元祖最合适.定义方式:在()内用逗号分隔开的多个任意类型的值t(1, ... [详细]
  • 我正在尝试使用 ... [详细]
  • 腾讯课堂——基础数据类型(set集合)
    认识集合由一个或多个确定的元素所构成的整体叫做集合。集合中的元素有三个特征:1.确定性(集合中的元素必须是确定的)2.互异性(集合中的元素互不相同。例如:集合A{1,a},则a不能 ... [详细]
  • Python集合第十一天
    Python集合集合(set)是一个无序的不重复元素序列。可以使用大括号{}或者set()函数创建集合,注意:创建一个空集合必须用set()而不是{},因为{}是用来创建一个空字典 ... [详细]
  • 如何解决《以编程方式获取Ruby关键字》经验,为你挑选了1个好方法。 ... [详细]
  • 如何解决《你真的可以用C语言重新定义关键字吗?》经验,为你挑选了1个好方法。 ... [详细]
author-avatar
a13786812476
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有