小编ric*_*rdo的帖子

用knitr编译*.Rnw文件 - 没有Rstudio

我想knitr用来创建嵌入R对象和代码的演示文稿.

由于IT的原因,我被限制为vim,所以我发现可用的Rstudio + knitr示例相当无益.在的VIM部分knitr 文件也很瘦,因此无益.

是否有人能够提供关于如何编译一些指导*.Rnw*.Rmd文件中使用knitr使用的某种组合(或交替地指向我一个体面的在线教程?) vim,R在命令行中,和?

提前致谢

vim r knitr

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

是什么让rollmean比rollapply更快(代码方式)?

我经常发现时间序列的滚动事件(特别是手段),并且惊讶地发现它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)

r zoo

6
推荐指数
1
解决办法
892
查看次数

Vectorise找到最近的日期函数

我想传递一个日期向量,并从第二个(部分匹配)日期向量返回最接近的日期.

以下函数执行我对单个日期所需的功能,但是我无法弄清楚如何将其概括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)

r date

5
推荐指数
2
解决办法
2387
查看次数

缩放xts对象的列

我经常以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这样做的?

for-loop r apply xts

5
推荐指数
1
解决办法
736
查看次数

在字符串的最后一个句点后删除文本

我有一个grep难以理解的难题:我想删除字符串集合中最后一段时间后的文本(我正在使用R,因此perl语法可用).

例如,假设字符串是ABCD.txtgrep将返回ABCD,如果文本是abc.com.foo.bar,它将返回abc.com.foo.

任何帮助非常感谢(我不认为我可以喝更多的咖啡!).

grep r

5
推荐指数
1
解决办法
3326
查看次数

有效地将环境从内部功能转移到全球环境

我有一个在其中创建环境的功能,我希望将该环境分配给全局环境.目前我通过将环境分配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()),没有工作.

为什么会失败?这可能吗?

另外,最有效的方法是什么?

我的表有时非常大,随着项目的发展,复制将成为一个问题.

environment r

5
推荐指数
1
解决办法
1017
查看次数

结合R中的头尾方法

我在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)

r tail head cat dataframe

4
推荐指数
2
解决办法
5225
查看次数

为数据集逐行应用函数

希望能够清楚地解释我想做什么.

我有一个矩阵

  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

4
推荐指数
1
解决办法
2万
查看次数

更改 R CMD 构建的目标

是否可以在R CMD build ...命令中设置一个标志来指定文件的目标文件夹tar.gz

我已经非常仔细地看了R CMD --help看,但看不到它——但我可能遗漏了一些东西。

packages r

3
推荐指数
1
解决办法
1287
查看次数

R中的组switch语句

我有一个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中有这样的东西吗?

非常感谢

r switch-statement

3
推荐指数
1
解决办法
301
查看次数

自动将变量名称添加到列表的元素

我有一个模型列表,并使代码更容易维护(所以最简单的添加和删除模型)我想有一个地方,我存储它们和他们的名字.为此,我必须解决以下命名问题.

在上游,我已经以比以下效率更低的方式生成模型(如果这是压缩的,我会将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 ...) …

string r

3
推荐指数
1
解决办法
1132
查看次数

在lm()调用中更新数据

是否有相当于更新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对象并简单地滚动数据将非常方便.

regression r

2
推荐指数
1
解决办法
2062
查看次数

将未知变量分配给新变量名称

我必须加载许多文件并改变他们的数据.每个文件只包含一个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)

有没有更好的办法?

r environments

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

标签 统计

r ×13

apply ×1

cat ×1

dataframe ×1

date ×1

environment ×1

environments ×1

for-loop ×1

grep ×1

head ×1

knitr ×1

packages ×1

regression ×1

string ×1

switch-statement ×1

tail ×1

vim ×1

xts ×1

zoo ×1