我有一个围绕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) 我正在使用python 3,我试图找到一种方法来获取列表的所有排列,同时执行一些约束.
例如,我有一个清单 L=[1, 2, 3, 4, 5, 6, 7]
我想找到所有的排列.但是,我的约束是:
当然,我可以生成所有排列并忽略那些不遵循这些约束的排列,但我认为这不会有效.
有没有办法在R中的Linux计算机上访问Windows版本的帮助文件?
我在Linux机器上编写了大量的R代码,但我必须确保代码可以在Windows机器上运行以供协作者使用.
通过在我的Linux机器上阅读帮助文件,编写我的代码,然后花了几个小时想知道为什么它不能在Windows机器上工作,直到我检查该机器上的帮助文件并意识到它是不同的,我已经被烧了很多次到Linux机器上的那个.
它通常会有一个"注意:在Windows上,xxxx行为不同......",我希望我知道在我的Linux机器上编写代码时!
我确实意识到许多帮助文件是特定于系统的(例如?system),但有时我想在Linux计算机上阅读Windows版本.今天我发现自己想要阅读,?windows但不得不启动我的Windows笔记本电脑只是为了阅读帮助文件,因为该功能在Linux上不可用,因此没有帮助文件.
干杯.
我正在尝试测试包中是否存在特定的变量或函数.例如,假设我想测试一个名为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特定包吗?)
(是的,我可以将上面的两行合并到第一个测试plot中graphics,然后询问模式plot,但是如果我有自己的功能plot屏蔽graphics::plot怎么办?我可以信任输出exists('plot', mode='function')吗?)
背景:为我的软件包编写测试,并希望测试导出的各种函数.我正在使用testthat在我可以看到包的所有内部功能的环境中执行测试的包,并且通过exists('myfunction', mode='function')返回true而被蜇,但我实际上忘记了导出myfunction.我想测试导出各种函数.
在?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) 我有几个Rmd文档,除了标题之外都有相同的YAML前端.如何将此前置文件保存在一个文件中并将其用于所有文档?它变得相当大,我不希望每次调整前端时都保持每个文件的步骤.
我还想
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代码(在本例中为日期)将被编译为奖励,但它是没必要(我只把它用于我不需要的日期).
我还没有完成任何这些工作.
_output.yaml放置常见的YAML元数据,但这会将所有元数据放在output:YAML中,因此只适用于html_document:和下的选项pdf_document:,而不是像作者,日期等...写一个knitr chunk来导入YAML,例如
----
title: …Run Code Online (Sandbox Code Playgroud)我想弄清楚为什么我的.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环境变量.)
我正在使用正则表达式: pattern=/([a-zA-Z0-9_\.].*?)=(.*?);/g;在我使用的文本中有多个匹配项.现在我想要"="之后的内容.我使用RegExp.$2但它只给出一个值.请帮助我在所有可用的匹配项中获得"="之后的值.
我最近通过编写一些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类中完成的事情.
所以,我的问题是:
Subclass.prototype = new Superclass()而不是做Subclass.prototype = { __proto__:Superclass.prototype, define_prototype_methods_here }方法,但我的想法是,如果gnome-shell一直使用它,必须有一些方法吗?Superclass.prototype._init.call(this)同在Subclass._init,以确保在Subclass.prototype得到所有Superclass(我在我的定义中添加的方法/属性Subclass.prototype),如果Superclass没有_init函数(即它是否有一些我调用的等效构造函数)?我真的很困惑这一切所以请原谅我,如果我的问题没有多大意义; 这是因为我的误解和困惑的程度!
编辑:澄清: - …
我想在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.但我不确切知道如何.
谢谢
r ×6
javascript ×2
awk ×1
knitr ×1
permutation ×1
python ×1
r-markdown ×1
regex ×1
rstudio ×1
sed ×1
unix ×1