Henrik Bengtsson为互联网提供了一种在R中创建S3泛型的好方法,而不必担心它们是否在2002年之前创建过.
他的函数setGenericsS3的作用基本上是:
如果是这样,
如果没有,只需创建通用.
事实证明,当您自己的软件包中没有可用的代码时,自动创建泛型非常有用.当我们走过这个R时代时,我想知道现在在R中实现相同的正确方法是什么.我isS3Generic()在R中找不到或类似的函数,Henrik Bengtsson的代码源自R 2.14中引入的强制命名空间.我记得我已经看到了实现同样目标的其他方法,但找不到它们.
编辑:我特意找S3.该功能isGeneric()仅适用于S4,例如anova(用于S3通用):
> isGeneric('anova')
[1] FALSE
> anova
function (object, ...)
UseMethod("anova")
<bytecode: 0x04dc7a18>
<environment: namespace:stats>
Run Code Online (Sandbox Code Playgroud) 我想编写一个向用户显示状态消息的函数,该消息显示时间,完成百分比和进程的当前状态.我可以处理组合消息,但我想做的事情不仅仅是打印到控制台并让它向上滚动,一个消息接着另一个.我真的很喜欢在不滚动message()和没有任何图形的情况下更改消息.这可能与R?
R有一些内存分析工具,比如 Rprofmem(),Rprof()选项"memory.profiling=TRUE"和tracemem().最后一个只能用于对象,因此可以跟踪复制对象的次数,但不提供基于函数的概述.Rprofmem应该能够做到这一点,但即使是最简单的函数调用的输出也会lm()提供超过500行的日志.我试图找出究竟Rprof("somefile.log",memory.profile=T)做了什么,但我不认为我真的明白了.
我能找到的最后一个是托马斯·拉姆利的这个消息,说道,我引述:
我还没有工具来总结输出.
这是在2006年也有一些不错摘要选择现在任何机会,主要是基于Rprofmem(),神秘的输出Rprof()与memory.profile设置为TRUE或任何其他工具?
由于termplotR中的函数包含一些令我烦恼的错误的奇怪代码,我想在我自己的测试代码中覆盖它,直到我找到一个更永久的解决方案.问题是mgcv包没有加载更改的功能.该mgcv包importFrom()在NAMESPACE文件中使用其名称空间中的stats包加载termplot .
我怎样才能说服mgcv使用改变的termplot?我试过了 :
unlockBinding("termplot", as.environment("package:stats"))
assign("termplot", my.termplot, as.environment("package:stats"))
lockBinding("termplot", as.environment("package:stats"))
Run Code Online (Sandbox Code Playgroud)
当应用于lm-objects时,这个工作并且使用改变的termplot.但是当使用mgcv包生成的gam-object时,这不起作用.如果我可以避免它,我真的不会从源代码构建stats包...
为了澄清,我也试过了
assignInNamespace("termplot", my.termplot, ns="stats")
assignInNamespace("termplot", my.termplot, ns="mgcv")
Run Code Online (Sandbox Code Playgroud)
在所有可能的组合中,在附加mgcv之后,在附加mgcv之后,我没有设法让它工作.
编辑:
我尝试了这里给出的所有选项(除了重建任何一个包),并且无法让它工作.对我来说简单的方法是使用包装函数.这个讨论可以在这里找到.感谢所有的提示.
一个可重复的例子:
my.termplot <- function (x) print("my new termplot")
unlockBinding("termplot", as.environment("package:stats"))
assignInNamespace("termplot", my.termplot, ns="stats", envir=as.environment("package:stats"))
assign("termplot", my.termplot, as.environment("package:stats"))
lockBinding("termplot", as.environment("package:stats"))
y <- 1:10
x <- 1:10
xx <- lm(y~x)
termplot(xx)
require(mgcv)
dat <- gamSim(1, n = 400, dist = "normal", scale = 2)
b <- gam(y ~ s(x0) + …Run Code Online (Sandbox Code Playgroud) 我的问题很简单.我想要的是A[i]!=NA,然后C[i]=A[i],A[i]=NA然后C[i]=B[i],然而,我总是得到一些错误消息.有人可以帮帮我吗?
A B C
NA 82.6 .
NA 127.2 .
NA 93.6 .
NA 105 .
NA 104 .
NA 90.6 .
NA 95.8 .
NA 103 .
NA 85.4 .
NA 81.5 .
NA 142.8 .
NA 102.3 .
NA 104 .
NA 103 .
NA 94.6 .
NA 113.8 .
NA 113.5 .
NA 74.5 .
NA 123.8 .
NA 94 .
NA 89.8 .
NA 74 .
NA 104 …Run Code Online (Sandbox Code Playgroud) 我的问题是如何在系统R中加入两个或多个数据帧?
例如:
我有两个数据框:
第一:
x y z
1 3 2 4
2 4 5 7
3 5 6 8
Run Code Online (Sandbox Code Playgroud)
第二:
x y z
1 1 1 1
2 4 5 7
Run Code Online (Sandbox Code Playgroud)
我需要这个:
x y z
1 3 2 4
2 4 5 7
3 5 6 8
4 1 1 1
5 4 5 7
Run Code Online (Sandbox Code Playgroud)
我试图为每个向量使用append,如下所示:
for(i in 1:length(first)){
Run Code Online (Sandbox Code Playgroud)mix[[i]]<-append(first[i], second[i])}f <-do.call(rbind,mix)
但它不像我需要的那样工作.我没有得到我的矩阵,我有一些不同的结构.
我已经打了一下,与system()和system2()欢乐,我突然想到我能救输出或在对象退出状态.玩具示例:
X <- system("ping google.com",intern=TRUE)
Run Code Online (Sandbox Code Playgroud)
给我输出,而
X <- system2("ping", "google.com")
Run Code Online (Sandbox Code Playgroud)
给我退出状态(在这种情况下为1,谷歌不接受ping).如果我想要输出和退出状态,我必须进行2次系统调用,这看起来有点矫枉过正.如何只使用一个系统调用?
编辑:我想在控制台中同时使用两者,如果可能的话,不通过stdout="somefile.ext"在system2调用中使用临时文件并随后读取它.
我试图在R(而不是data.frame)中对data.table(来自包data.table)进行子集化.我有一个4位数的年份作为关键.我想通过一系列的几年来分组.例如,我想要提取1999年,2000年,2001年的所有记录.
我试过传递DT[J(year)]以下二进制搜索语法:
1999,2000,2001
c(1999,2000,2001)
1999, 2000, 2001
Run Code Online (Sandbox Code Playgroud)
但这些似乎都不起作用.任何人都知道如何做一个子集,你想要选择的年份不只是1年,而是多年?
我正在寻找一个比双重积分更快的解决方案
integrate(function(y) {
sapply(y, function(y) {
integrate(function(x) myfun(x,y), llim, ulim)$value
})
}, llim, ulim)
Run Code Online (Sandbox Code Playgroud)
用例如
myfun <- function(x,y) cos(x+y)
llim <- -0.5
ulim <- 0.5
Run Code Online (Sandbox Code Playgroud)
我找到了一篇旧论文,提到了一个名为FORTRAN的程序quad2d,但我找不到其他任何东西,除了一些matlab的帮助页面.所以我正在寻找一个可以快速进行双积分的C或FORTRAN库(即没有sapply循环),并且可以从R调用.所有想法都非常受欢迎,只要它们都是GPL兼容的.
如果解决方案涉及从R已经附带的库中调用其他功能,我也很乐意听取他们的意见.