人们用什么技巧来管理交互式R会话的可用内存?我使用下面的函数[根据Petr Pikal和David Hinds在2004年的r-help列表中的帖子]列出(和/或排序)最大的对象,偶尔列出rm()其中的一些.但到目前为止,最有效的解决方案是在具有充足内存的64位Linux下运行.
人们想分享其他任何好玩的伎俩吗?请发一个帖子.
# improved list of objects
.ls.objects <- function (pos = 1, pattern, order.by,
decreasing=FALSE, head=FALSE, n=5) {
napply <- function(names, fn) sapply(names, function(x)
fn(get(x, pos = pos)))
names <- ls(pos = pos, pattern = pattern)
obj.class <- napply(names, function(x) as.character(class(x))[1])
obj.mode <- napply(names, mode)
obj.type <- ifelse(is.na(obj.class), obj.mode, obj.class)
obj.size <- napply(names, object.size)
obj.dim <- t(napply(names, function(x)
as.numeric(dim(x))[1:2]))
vec <- is.na(obj.dim)[, 1] & (obj.type != "function")
obj.dim[vec, 1] <- napply(names, length)[vec]
out <- data.frame(obj.type, …Run Code Online (Sandbox Code Playgroud) 对于使用roxygen(2)记录类,指定标题和描述/细节似乎与函数,方法,数据等相同.但是,插槽和继承是它们自己的动物类型.在roxygen2中记录S4类的最佳实践 - 当前或计划的最佳实践是什么?
尽职调查:
我@slot在早期的roxygen描述中发现了一个标签.
2008 R-forge邮件列表帖
似乎表明这已经死了,并且没有对@slotroxygen的支持:
roxygen2是真的吗?前面提到的帖子建议用户应该使用LaTeX标记创建自己的逐项列表.例如,扩展"character"该类的新S4类将被编码并记录如下:
#' The title for my S4 class that extends \code{"character"} class.
#'
#' Some details about this class and my plans for it in the body.
#'
#' \describe{
#' \item{myslot1}{A logical keeping track of something.}
#'
#' \item{myslot2}{An integer specifying something else.}
#'
#' \item{myslot3}{A data.frame holding some data.}
#' }
#' @name mynewclass-class
#' @rdname mynewclass-class
#' @exportClass mynewclass
setClass("mynewclass",
representation(myslot1="logical",
myslot2="integer",
myslot3="data.frame"), …Run Code Online (Sandbox Code Playgroud) 有谁知道如何从R中的data.frame中删除整个列?例如,如果给我这个data.frame:
> head(data)
chr genome region
1 chr1 hg19_refGene CDS
2 chr1 hg19_refGene exon
3 chr1 hg19_refGene CDS
4 chr1 hg19_refGene exon
5 chr1 hg19_refGene CDS
6 chr1 hg19_refGene exon
Run Code Online (Sandbox Code Playgroud)
我想删除第二列.
我试图找出一种有效的方法来分割字符串
"111110000011110000111000"
Run Code Online (Sandbox Code Playgroud)
到一个矢量
[1] "11111" "00000" "1111" "0000" "111" "000"
Run Code Online (Sandbox Code Playgroud)
其中"0"和"1"可以是任何交替的字符.
是否有一些机制可以转换roxygen看到的评论,最好是在进行roxygen-> rd转换之前?
例如,假设我有:
#' My function. Does stuff with numbers.
#'
#' This takes an input `x` and does something with it.
#' @param x a number.
myFunction <- function (x) {
}
Run Code Online (Sandbox Code Playgroud)
现在,假设我想在roxygen解析之前对注释进行一些转换,例如用反引号替换所有实例\code{}.即:
preprocess <- function (txt) {
gsub('`([^ ]+)`', '\\\\code{\\1}', txt)
}
# cat(preprocess('Takes an input `x` and does something with it'.))
# Takes an input \code{x} and does something with it.
Run Code Online (Sandbox Code Playgroud)
我可以preprocess以某种方式进入roxygen,以便它会在之前(或者在这种情况下工作之后)在doclet上运行它吗?roxygen会生成它的文档吗?
我不想在我的.r文件中进行永久性的查找替换.正如你可能从我的例子中猜到的那样,我的目标是在我的roxygen评论中提供一些基本的降价支持,因此希望保留我的.r文件以保持可读性(并以\code{..}编程方式插入内容).
如果我只是写我自己的版本roxygenise,运行preprocess …
我想估计一个响应的协变量效应,其值取[0,1]中的值.也就是说,响应变量的值存在于0-1(包括)之间.我想使用Papke和Wooldridge(1996)描述的分数logit模型,见下文:
http://faculty.smu.edu/millimet/classes/eco6375/papers/papke%20wooldridge%201996.pdf
是否有R函数(或库)来促进分数logit模型的估计?我能glm()以某种方式修改吗?
我很欣赏@Jibler的评论 - 这可以从分数logit模型得到估计的beta值.但是,正如@Ben指出的那样,鉴于此规范,将无法正确估计SE.
我认为这是一个更受欢迎的经济学模型,因此STATA期刊撰稿人对此进行了充分讨论: http://fmwww.bc.edu/EC-C/S2013/823/EC823.S2013.nn06.slides.pdf http:/ /www.stata.com/meeting/germany10/germany10_buis.pdf
我能够从Papke和Wooldridge 401k计划示例中获得数据(见下文).在我看来,至少在分数logit模型中的稳健性是通过方差的三明治估计 - Papke和Wooldridge的方程(9)得到的.也就是说,等式(10)继续展示如何通过将估计的vcov矩阵与标准glm(...,family=binomial(link=logit))拟合预先乘以Pearson残差的估计来获得稳健性.
Buis的幻灯片似乎sandwich()使用参数vce(robust)实现了小数logit估计器的一种形式.这些与sandwich()R 中的函数的应用完全一致,与标准二项式GLM一致.我假设,但我不确定,因为我不是STATA,这与Baum的论点一样简单robust吗?如果有人拥有STATA并且可以检查这将有所帮助.family=quasibinomialGLM给出的模型给出了略微不同的SE估计值.但它似乎也是分数logit模型的均值/方差参数的合理估计.
下面是一些R代码,它复制了上面Buis文章中给出的数据拟合(它还显示了准二项式模型如何给出略微不同的SE估计):
##
## Replicate what some STATA Journal editors call "fractional logit"
## get data from: "http://fmwww.bc.edu/repec/bocode/k/k401.dta"
##
library(sandwich)
library(foreign)
X <- read.dta("F:/ProportionsDepVar/k401.dta")
class(X)
names(X)
dim(X)
X$totemp1 <- X$totemp/10000
glmfit <- glm(prate ~ mrate + totemp1 + age + sole, family=binomial(link=logit), data=X)
summary(glmfit)
##
## And the SE's …Run Code Online (Sandbox Code Playgroud) 在Windows上,我如何指示R调用TeXlive而不是MikTeX?
我已经在我的Linux和Windows机器上设置了R.在我的Windows机器上,我碰巧有MikTeX和TeXlive可用.由于我不打算进入原因,我想让R打电话给TeXlive.此时,R正在接收MikTeX.
我猜我需要在我的Renviron文件中设置TEXINPUTS,或类似的东西.但我无法在网上找到准确的说明.帮助将不胜感激.
更新:以下是我尝试过的不同内容:在PATH中更改TeXlive和MikTeX的顺序.从路径中删除MikTeX.两者都没有奏效,MikTeX仍然被选中.
我找不到R的相关文档,但我确实在RStudio文档中找到了一些提示,所以我试图解决RStudio中的问题.我成功定义了RSTUDIO_PDFLATEX环境变量:
Sys.getenv('RSTUDIO_PDFLATEX')
[1] "C:/texlive/2012/bin/win32"
Run Code Online (Sandbox Code Playgroud)
[参考:http://www.rstudio.com/ide/docs/authoring/latex_program?version = 0.97.312&mode = desktop]
但MikTeX仍然受到欢迎.
Sys.which("pdflatex")
pdflatex
"C:\\PROGRA~2\\MIKTEX~1.9\\miktex\\bin\\pdflatex.exe"
Run Code Online (Sandbox Code Playgroud)
更新2:我尝试过的另一件事:虽然texlive已经在我的PATH上了,以防我从R中添加它.
Sys.setenv("PATH" = paste(Sys.getenv("PATH"),"C:/texlive/2012/bin/win32",sep=":"))
Run Code Online (Sandbox Code Playgroud)
我还尝试将Sys.which("pdflatex")返回的pdflatex路径设置为以下内容:
Sys.setenv(pdflatex="C:/texlive/2012/bin/win32")
Run Code Online (Sandbox Code Playgroud)
以及PDFLATEX或"PDFLATEX"的变体,但这没有帮助.除了texlive的路径之外,我还删除了路径中的所有内容:
Sys.setenv("PATH" = "C:/texlive/2012/bin/win32")
Run Code Online (Sandbox Code Playgroud)
这给了我理想的道路
Sys.which("pdflatex")
pdflatex
"C:\\texlive\\2012\\bin\\win32\\pdflatex.exe"
Run Code Online (Sandbox Code Playgroud)
但是,运行texi2dvi失败:
tools::texi2pdf(Out)
Error in texi2dvi(file = file, pdf = TRUE, clean = clean, quiet = quiet, :
pdflatex is not available
Run Code Online (Sandbox Code Playgroud) 我在寻找R中的gzfiles时遇到了麻烦.这是一个例子:
set.seed(123)
m=data.frame(z=runif(10000),x=rnorm(10000))
write.csv(m,"m.csv")
system("gzip m.csv")
file.info("m.csv.gz")$size
[1] 195975
Run Code Online (Sandbox Code Playgroud)
这就产生了m.csv.gz,R说它可以寻求,并且seek似乎同意的帮助:
gzf=gzfile("m.csv.gz")
open(gzf,"rb")
isSeekable(gzf)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
现在小跳,来回,似乎工作,但如果我尝试大跳,我得到一个错误:
seek(gzf,10)
[1] 10
seek(gzf,20)
[1] 10
seek(gzf,10)
[1] 20
seek(gzf,1000)
[1] 100
Warning message:
In seek.connection(gzf, 1000) :
seek on a gzfile connection returned an internal error
Run Code Online (Sandbox Code Playgroud)
但是,如果我重置连接并重新启动,如果我以100字节的步骤执行此操作,则可以达到1000:
for(i in seq(100,1000,by=100)){seek(gzf,i)}
seek(gzf,NA)
[1] 1000
Run Code Online (Sandbox Code Playgroud)
R seek在Windows中使用时有一些严厉的说法:"不鼓励在Windows上使用'seek'." 但这是在Linux机器上(R 3.1.1,32位).python中使用该gz库的类似代码工作正常,遍及各处.
R 3.2.0稍微提供了更多信息:
Warning messages:
1: In seek.connection(gzf, 1000) : invalid or incomplete compressed data
2: In seek.connection(gzf, 1000) : …Run Code Online (Sandbox Code Playgroud) 我能以某种方式通过参考原子矢量使用子分配吗?
当然没有将它包装在1列data.table中使用:=.
library(data.table)
N <- 5e7
x <- sample(letters, N, TRUE)
X <- data.table(x = x)
upd_i <- sample(N, 1L, FALSE)
system.time(x[upd_i] <- NA_character_)
# user system elapsed
# 0.11 0.06 0.17
system.time(X[upd_i, x := NA_character_])
# user system elapsed
# 0.00 0.00 0.03
Run Code Online (Sandbox Code Playgroud)
如果R6可以提供帮助,那我就开放R6解决方案,因为它已经是我的一个解决方案了.
我已经检查过<-内部R6对象仍然会复制:gist.
这一页:
http://rmarkdown.rstudio.com/authoring_bibliographies_and_citations.html
描述了将引文和生成的参考书目添加到常规rmarkdown文档中.使用时创作演示文稿时rmarkdown,此方法适用于ioslides,slidify和beamer演示文稿.
将参考书目:行添加到演示文稿的前端内容的方法不适用于较新的"Rpres"演示文稿.
如何在Rpres rmarkdown演示文稿文件中添加参考书目?
我怀疑答案是Rpres文件的模板或构建选项不支持这一点.如果是这种情况,那么关于将补丁添加--bibliography=到调用的选项的位置的指针pandoc将不胜感激.
我的环境包括