小编mat*_*fee的帖子

R warning()包装器 - 提升到父函数

我有一个围绕warning()R中内置函数的包装器,基本上调用warning(sprintf(...)):

warningf <- function(...)
    warning(sprintf(...))
Run Code Online (Sandbox Code Playgroud)

这是因为我warning(sprintf(...))经常使用,所以我决定用它来创建一个函数(它在我经常使用的函数的包中).

然后warningf我在写函数时使用.即,而不是写:

f <- function() {
    # ... do stuff
    warning(sprintf('I have %i bananas!',2))
    # ... do stuff
}
Run Code Online (Sandbox Code Playgroud)

我写:

f <- function() {
    # ... do stuff
    warningf('I have %i bananas!',2)
    # ... do stuff
}
Run Code Online (Sandbox Code Playgroud)

如果我打电话给第一个f(),我得到:

Warning message:
In f() : I have 2 bananas!
Run Code Online (Sandbox Code Playgroud)

这很好 - 它告诉我警告来自哪里f()以及出了什么问题.

如果我打电话给第二个f(),我得到:

Warning message:
In warningf("I have %i bananas!",2) : I have …
Run Code Online (Sandbox Code Playgroud)

r

11
推荐指数
1
解决办法
356
查看次数

具有约束的Python排列

我正在使用python 3,我试图找到一种方法来获取列表的所有排列,同时执行一些约束.

例如,我有一个清单 L=[1, 2, 3, 4, 5, 6, 7]

我想找到所有的排列.但是,我的约束是:

  • 1应始终在2之前.
  • 3应该在4之前,而5应该在5之前.
  • 最后,6应该在7之前.

当然,我可以生成所有排列并忽略那些不遵循这些约束的排列,但我认为这不会有效.

python permutation python-itertools

10
推荐指数
1
解决办法
4591
查看次数

R帮助不同操作系统上的文件

有没有办法在R中的Linux计算机上访问Windows版本的帮助文件?

我在Linux机器上编写了大量的R代码,但我必须确保代码可以在Windows机器上运行以供协作者使用.

通过在我的Linux机器上阅读帮助文件,编写我的代码,然后花了几个小时想知道为什么它不能在Windows机器上工作,直到我检查该机器上的帮助文件并意识到它是不同的,我已经被烧了很多次到Linux机器上的那个.

它通常会有一个"注意:在Windows上,xxxx行为不同......",我希望我知道在我的Linux机器上编写代码时!

我确实意识到许多帮助文件是特定于系统的(例如?system),但有时我想在Linux计算机上阅读Windows版本.今天我发现自己想要阅读,?windows但不得不启动我的Windows笔记本电脑只是为了阅读帮助文件,因为该功能在Linux上不可用,因此没有帮助文件.

干杯.

operating-system r

9
推荐指数
1
解决办法
139
查看次数

查看包中是否存在变量/函数?

我正在尝试测试包中是否存在特定的变量或函数.例如,假设我想测试一个名为plot"graphics" 的函数是否存在.

以下测试函数是否plot存在,但不测试它来自哪个包:

exists('plot', mode='function')
Run Code Online (Sandbox Code Playgroud)

或者我可以测试包中plot存在的东西graphics,但这并不能告诉我它是否是一个函数:

'plot' %in% ls('package:graphics')
Run Code Online (Sandbox Code Playgroud)

有没有一种很好的方式可以问"模式Z的包Y中是否存在名为X的对象"?(基本上,我可以限制exists特定包吗?)

(是的,我可以将上面的两行合并到第一个测试plotgraphics,然后询问模式plot,但是如果我有自己的功能plot屏蔽graphics::plot怎么办?我可以信任输出exists('plot', mode='function')吗?)

背景:为我的软件包编写测试,并希望测试导出的各种函数.我正在使用testthat在我可以看到包的所有内部功能的环境中执行测试的包,并且通过exists('myfunction', mode='function')返回true而被蜇,但我实际上忘记了导出myfunction.我想测试导出各种函数.

r

9
推荐指数
2
解决办法
2502
查看次数

使用`agrep(...,fixed = F)`的困难

?agrep(grep模糊匹配)中,它提到我可以设置参数fixed=FALSE让我的模式被解释为正则表达式.

但是,我无法让它工作!

agrep('(asdf|fdsa)', 'asdf', fixed=F)
# integer(0)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,上面应该匹配正则表达式"(asdf | fdsa)" 与测试字符串"asdf" 完全匹配.

确认:

grep('(asdf|fdsa)', 'asdf', fixed=F)
# 1 : it does match with grep
Run Code Online (Sandbox Code Playgroud)

更令人困惑的是,adist正确地将模式和字符串之间的距离设为0,这意味着agrep应该肯定返回1而不是integer(0)(0不大于默认值max.dist = 0.1).

adist('(asdf|fdsa)', 'asdf', fixed=F)
#      [,1]
# [1,]    0
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?有什么我不明白的吗?解决方法? 我很乐意使用adist,但我不完全确定如何将agrep默认max.distance=0.1参数转换为adist相应的参数.

(是的,我被困在一台比R 2.15.2做得更好的旧电脑上)

> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: i686-redhat-linux-gnu (32-bit)    
locale:
 [1] LC_CTYPE=en_AU.utf8       LC_NUMERIC=C             
 [3] …
Run Code Online (Sandbox Code Playgroud)

r

9
推荐指数
1
解决办法
524
查看次数

在rstudio/knitr文档中导入常见的YAML

我有几个Rmd文档,除了标题之外都有相同的YAML前端.如何将此前置文件保存在一个文件中并将其用于所有文档?它变得相当大,我不希望每次调整前端时都保持每个文件的步骤.

我还想

  • 使用RStudio中的Knit按钮/ Ctrl+ Shift+ K快捷键进行编译
  • 保持整个设置的可移植性:希望避免编写自定义输出格式或覆盖rstudio.markdownToHTML(因为这需要我随身携带.Rprofile)

common.yaml:

author: me
date: "`r format (Sys.time(), format='%Y-%m-%d %H:%M:%S %z')`"
link-citations: true
reference-section-title: References
# many other options
Run Code Online (Sandbox Code Playgroud)

一个示例文档

----
title: On the Culinary Preferences of Anthropomorphic Cats
----

I do not like green eggs and ham. I do not like them, Sam I Am!
Run Code Online (Sandbox Code Playgroud)

期望的输出:已编译的示例文档(即HTML或PDF),已使用common.yaml注入的元数据进行编译.YAML中的R代码(在本例中为日期)将被编译为奖励,但它是没必要(我只把它用于我不需要的日期).

选项/解决方案?

我还没有完成任何这些工作.

  • 使用rmarkdown可以创建一个_output.yaml放置常见的YAML元数据,但这会将所有元数据放在output:YAML中,因此只适用于html_document:和下的选项pdf_document:,而不是像作者,日期等...
  • 写一个knitr chunk来导入YAML,例如

    ----
    title: …
    Run Code Online (Sandbox Code Playgroud)

r knitr r-markdown

9
推荐指数
1
解决办法
1000
查看次数

rstudio命令行R的不同库路径(`$ R_LIBS_USER`)

我想弄清楚为什么我的.libPath命令行R和RStudio 桌面之间有所不同(注意:这不是这个问题的重复,因为该修复涉及特定于RStudio Server的东西,我没有).

当我在命令行(linux)上使用R时:

> .libPaths()
[1] "/home/mathematicalcoffee/R/library"  "/usr/local/lib/R/site-library"
[3] "/usr/lib/R/site-library"             "/usr/lib/R/library"           
Run Code Online (Sandbox Code Playgroud)

当我使用RStudio Desktop(linux,同一台机器)时:

[1] "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"       "/usr/lib/R/library"            "/usr/lib/rstudio/R/library"  
Run Code Online (Sandbox Code Playgroud)

现在我已$R_LIBS_USER~/R/library我的bash的个人资料,所以R-命令行捡起来,为我的首选LIBPATH.

当我这样做时,问题出在RStudio桌面:

Sys.getenv('R_LIBS_USER')
# "~/R/x86_64-pc-linux-gnu-library/2.15"
Run Code Online (Sandbox Code Playgroud)

那么为什么RStudio桌面会改变我的R_LIBS_USER?我怎样才能改回来?(我不使用.Rprofile文件).(在我上面链接的问题中,RStudio Server的解决方案是修改/etc/rstudio/rsession.conf,但我没有,因为我有RStudio桌面.而且,我相信RStudio应该尊重我的R_LIBS_USER环境变量.)

r rstudio

8
推荐指数
1
解决办法
8169
查看次数

javascript中多个匹配的正则表达式组

我正在使用正则表达式: pattern=/([a-zA-Z0-9_\.].*?)=(.*?);/g;在我使用的文本中有多个匹配项.现在我想要"="之后的内容.我使用RegExp.$2但它只给出一个值.请帮助我在所有可用的匹配项中获得"="之后的值.

javascript regex

7
推荐指数
1
解决办法
2601
查看次数

使用.prototype和__proto__创建子类

我最近通过编写一些gnome shell扩展来学习javascript,因此我对Javascript的理解已经被我在gnome-shell javascript源中观察到的例子所塑造.我有一种感觉,我一直在理解错误的课程,只是想要一些澄清.

我已经编写了一些自己的子类,并且在每种情况下我只是通过遵循gnome-shell javascript源代码中的类似代码来定义它们:

Subclass = function() {
    this._init.apply(this,arguments);
}
Subclass.prototype = {
    __proto__: Superclass.prototype,
    _init: function() {
        Superclass.prototype._init.call(this);
    },
    // add other methods of Subclass here.
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我认为这是制作课程的标准方式,Subclass基本上是Superclass额外的.我假设每个对象都有一个_init方法.

我最近尝试应用相同的方法来创建a的子类Clutter.Actor(重要的是它不是GNOME-shell定义的类),并且意识到上面的子类化对象的方式不是标准.首先,并非每个班级都有_init我所假设的功能; 这只是GNOME-shell在他们的javascript类中完成的事情.

所以,我的问题是:

  1. 是否有关于上述创建子类的方法的文档?我见过的所有教程都说设置Subclass.prototype = new Superclass()而不是做Subclass.prototype = { __proto__:Superclass.prototype, define_prototype_methods_here }方法,但我的想法是,如果gnome-shell一直使用它,必须有一些方法吗?
  2. 如果我想留在尽可能靠近到定义类(就这样我就可以保留一些代码相似GNOME-Shell对于它我写扩展)以上的方式,我该怎么更换Superclass.prototype._init.call(this)Subclass._init,以确保在Subclass.prototype得到所有Superclass(我在我的定义中添加的方法/属性Subclass.prototype),如果Superclass没有_init函数(即它是否有一些我调用的等效构造函数)?

我真的很困惑这一切所以请原谅我,如果我的问题没有多大意义; 这是因为我的误解和困惑的程度!

编辑:澄清: - …

javascript

7
推荐指数
1
解决办法
1284
查看次数

在模式之后提取字符串

我想在client_id和id之后提取数字,并在每一行中配对client_id和id.

例如,对于以下日志行,

User(client_id:03)) results:[RelatedUser(id:204, weight:10),_RelatedUser(id:491,_weight:10),_RelatedUser(id:29, weight: 20)

User(client_id:04)) results:[RelatedUser(id:209, weight:10),_RelatedUser(id:301,_weight:10)

User(client_id:05)) results:[RelatedUser(id:20, weight: 10)
Run Code Online (Sandbox Code Playgroud)

我想输出

03 204
03 491
03 29
04 209
04 301
05 20
Run Code Online (Sandbox Code Playgroud)

我知道我需要使用sed或awk.但我不确切知道如何.

谢谢

unix awk sed pattern-matching

7
推荐指数
2
解决办法
3083
查看次数