我想knitr用来创建嵌入R对象和代码的演示文稿.
由于IT的原因,我被限制为vim,所以我发现可用的Rstudio + knitr示例相当无益.在的VIM部分knitr 文件也很瘦,因此无益.
是否有人能够提供关于如何编译一些指导*.Rnw或*.Rmd文件中使用knitr使用的某种组合(或交替地指向我一个体面的在线教程?) vim,R在命令行中,和?
提前致谢
我经常发现时间序列的滚动事件(特别是手段),并且惊讶地发现它rollmean明显快于rollapply,并且align = 'right'方法比rollmeanr包装器更快.
他们是如何实现这种加速的?为什么在使用rollmeanr()包装器时会丢失一些?
一些背景:我一直在使用rollapplyr(x, n, function(X) mean(X)),但最近我发现了一些使用的例子rollmean.文件建议rollapplyr(x, n, mean)(注意没有function参数的部分)使用,rollmean所以我不认为性能会有太大差异,但rbenchmark显示出明显的差异.
require(zoo)
require(rbenchmark)
x <- rnorm(1e4)
r1 <- function() rollapplyr(x, 3, mean) # uses rollmean
r2 <- function() rollapplyr(x, 3, function(x) mean(x))
r3 <- function() rollmean(x, 3, na.pad = TRUE, align = 'right')
r4 <- function() rollmeanr(x, 3, align = "right")
bb <- benchmark(r1(), r2(), r3(), r4(),
columns = …Run Code Online (Sandbox Code Playgroud) 我想传递一个日期向量,并从第二个(部分匹配)日期向量返回最接近的日期.
以下函数执行我对单个日期所需的功能,但是我无法弄清楚如何将其概括searchDate为日期向量的情况.
closestDate <- function(searchDate, dateList, roundDown=FALSE){
if (roundDown) {
dist2date <- as.Date(dateList) - as.Date(searchDate)
closest <- which(max(dist2date[dist2date<=0]) == dist2date)
} else {
dist2date <- as.Date(dateList) - as.Date(searchDate)
closest <- which(min(dist2date[dist2date>=0]) == dist2date)
}
return(dateList[closest])
}
dateSeq <- seq(as.Date("2011-01-01"), as.Date("2012-12-19"), by='day')
oddDates <- dateSeq[as.logical(1:length(dateSeq) %%2)]
closestDate('2012-12-14', oddDates)
[1] "2012-12-15"
miscDatesLong <- rep(c('2012-12-14', '2012-12-16', '2012-12-18'), 100 )
closestDate(miscDatesLong, oddDates)
closestDate(miscDatesLong, oddDates)
[1] "2012-12-15" "2012-12-17" "2012-12-19"
Warning message:
In unclass(time1) - unclass(time2) :
longer object length is not a multiple …Run Code Online (Sandbox Code Playgroud) 我经常以xts格式处理数据,并且经常必须缩放它们(比如在某个日期等于100).我目前做到这一点使用的功能,其作品使用for-loop-然而,这似乎不是很实用.
这是我现在的表现:
df1 <- data.frame(rnorm(100), runif(100), 1:100*rnorm(100))
dfx <- xts(df1, order.by = seq(as.Date("2001-01-01"), by='mon', length.out=100))
dfxColScl <- function(dfrm, pos=1, idx = 100)
{
scaledDF <- dfrm
for (i in 1:ncol(dfrm)) {
scaledDF[, i] <- dfrm[,i] / as.numeric(dfrm[pos, i]) * idx
}
return(scaledDF)
}
Run Code Online (Sandbox Code Playgroud)
是否有一些聪明的apply类型函数是R这样做的?
我有一个grep难以理解的难题:我想删除字符串集合中最后一段时间后的文本(我正在使用R,因此perl语法可用).
例如,假设字符串是ABCD.txt这grep将返回ABCD,如果文本是abc.com.foo.bar,它将返回abc.com.foo.
任何帮助非常感谢(我不认为我可以喝更多的咖啡!).
我有一个在其中创建环境的功能,我希望将该环境分配给全局环境.目前我通过将环境分配globalenv()为最后一步来完成此操作- 如下所示:
funfun <- function(inc = 1){
dataEnv <- new.env()
dataEnv$d1 <- 1 + inc
dataEnv$d2 <- 2 + inc
dataEnv$d3 <- 2 + inc
assign('dataEnv', dataEnv, envir = globalenv())
}
Run Code Online (Sandbox Code Playgroud)
感觉就像我应该能够做什么来dataEnv在函数funfun结束时做出持久性(以保存最后复制环境)但是我的尝试,例如dataEnv <- new.env(parent = globalenv()),没有工作.
为什么会失败?这可能吗?
另外,最有效的方法是什么?
我的表有时非常大,随着项目的发展,复制将成为一个问题.
我在R package utils中经常使用head(d)和tail(d)方法 - 经常一个接一个地使用.所以我为这两个函数写了一个简单的包装器:
ht <- function(d, m=5, n=m){
# print the head and tail together
cat(" head --> ", head(d,m), "\n", "--------", "\n", "tail --> ", tail(d,n), "\n")
}
Run Code Online (Sandbox Code Playgroud)
我得到了一些意想不到的结果......有人可以帮我理解为什么吗?(所以我可以解决它......或者至少了解你的解决方案!).
一些背景......
数字很好:
x <- 1:100
ht(x)
Run Code Online (Sandbox Code Playgroud)
很复杂:
ni <- as.complex(1:100)
ht(ni)
Run Code Online (Sandbox Code Playgroud)
和性格:
ll <- letters[1:26]
ht(ll)
Run Code Online (Sandbox Code Playgroud)
矩阵失去了它的结构,将[1,1]返回到[5,5] + [16,1]到[20,5]但是作为两个向量 - 比较:
m <- matrix(1:10, 20)
ht(m)
Run Code Online (Sandbox Code Playgroud)
至:
head(m, 5)
tail(m,5)
Run Code Online (Sandbox Code Playgroud)
我想保留矩阵结构,就像utils方法那样 - 这可能吗?
最后(好吧,可能有更多错误,这就是我要去的地方)data.frames是一团糟:
df <- data.frame(num=x[1:26], char=ll)
ht(df)
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
head --> Error in cat(list(...), file, sep, fill, …Run Code Online (Sandbox Code Playgroud) 希望能够清楚地解释我想做什么.
我有一个矩阵
Z<-matrix(sample(1:40),ncol=4)
colnames(Z)<-c("value","A","B","C")
I would like to apply the following formula to each row in the dataset.
Process = value - rowmean (A,B,C)
------------------------------------
row-wise Standard deviation (A,B,C)
Run Code Online (Sandbox Code Playgroud)
我想到了类似于计算所有内容的东西
首先对数据进行子集
onlyABC<-Z[,1:3]
Run Code Online (Sandbox Code Playgroud)
然后将rowMeans应用于每一行
means<-apply(onlyABC,1,rowMeans)
Run Code Online (Sandbox Code Playgroud)
并且类似地分别计算标准偏差
deviate<-apply(onlyABC,1,SD)
Run Code Online (Sandbox Code Playgroud)
然后我现在不知道如何从'means'中减去矩阵'z'中的value列,然后除以'deviate'.
有没有更简单的方法来做到这一点?
作为一个例子,将公式应用于第一行将给出:
row1 32-(19+35+4/3)
--------------
SD(19+35+4)
Run Code Online (Sandbox Code Playgroud)
类似地,也可以将公式应用于其他行,最后获得大小为10的向量.
是否可以在R CMD build ...命令中设置一个标志来指定文件的目标文件夹tar.gz?
我已经非常仔细地看了R CMD --help看,但看不到它——但我可能遗漏了一些东西。
我有一个i映射到一组类别的变量.
我希望sector根据值的值将变量设置为匹配类别i.
我可以通过一系列if声明来做到这一点,如下所示:
if(i %in% c(7, 14, 21)) {sector = 'mining'}
if(i %in% c(28, 35, 42)) {sector = 'manu'}
if(i %in% c(49, 56, 63)) {sector = 'othr'}
if(i %in% c(70, 77, 84)) {sector = 'all'}
Run Code Online (Sandbox Code Playgroud)
这似乎应该是一种可用的分组交换机类型结构.R中有这样的东西吗?
非常感谢
我有一个模型列表,并使代码更容易维护(所以最简单的添加和删除模型)我想有一个地方,我存储它们和他们的名字.为此,我必须解决以下命名问题.
在上游,我已经以比以下效率更低的方式生成模型(如果这是压缩的,我会将assign它们归结为自己的模型env).
lmNms <- c( "mod1", "mod2", "mod3", "mod4", "mod5", "mod6")
lapply(lmNms, function(N) assign(N, lm(runif(10) ~ rnorm(10)), env = .GlobalEnv))
Run Code Online (Sandbox Code Playgroud)
在下游,我把这个烂摊子收集到一个列表中:
modelList <- list(mod1, mod2, mod3, mod4, mod5, mod6)
Run Code Online (Sandbox Code Playgroud)
我有一个(未命名的)变量输出列表,并附加如下名称:
output <- list(1, 2, 3, 4, 5, 6)
names(output) <- lmNms
Run Code Online (Sandbox Code Playgroud)
我希望能够使用以下模型名称modelList:
modelList <- list(mod1, mod2, mod3, mod4, mod5, mod6)
names(output) <- someFun(modelList)
Run Code Online (Sandbox Code Playgroud)
我确定存在someFun- 但我无法弄明白......这可以做到吗?
为了清楚起见,目的是在不使用的情况下这样做lmNms- 我想从modelList我建立modelList的地方获取名称,或者让它们附加(重点是避免list(a = a, b=b ...) …
是否有相当于更新lm调用对象的数据部分?
例如,假设我有以下型号:
dd = data.frame(y=rnorm(100),x1=rnorm(100))
Model_all <- lm(formula = y ~ x1, data = dd)
Run Code Online (Sandbox Code Playgroud)
是否有一种操作lm对象的方法具有以下效果:
Model_1t50 <- lm(formula = y ~ x1, data = dd[1:50,])
Run Code Online (Sandbox Code Playgroud)
我试图从样本预测测试中构建一些psudo,拥有一个lm对象并简单地滚动数据将非常方便.
我必须加载许多文件并改变他们的数据.每个文件只包含一个data.table,但表有各种名称.
我想在所有文件上运行一个脚本 - 为此,我必须将未知分配data.table给一个通用名称...说blob.
R这样做的方法是什么?目前,我最好的猜测(这似乎是一个黑客,但有效)是加载data.table到一个新的环境,然后:assign('blob', get(objects(envir=newEnv)[1], env=newEnv).
在可重现的上下文中,这是:
newEnv <- new.env()
assign('a', 1:10, envir = newEnv)
assign('blob', get(objects(envir=newEnv)[1], env=newEnv))
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?