小编Nat*_*nos的帖子

显示矩阵,包括值,作为热图

我想做的是采用这个矩阵:

> partb
                0.5  1.5   1a   1b   -2   -3
A1FCLYRBAB430F 0.26 0.00 0.74 0.00 0.00 0.00
A1SO604B523Q68 0.67 0.33 0.00 0.00 0.00 0.00
A386SQL39RBV7G 0.00 0.33 0.33 0.33 0.00 0.00
A3GTXOXRSE74WD 0.41 0.00 0.08 0.03 0.05 0.44
A3OOD9IMOHPPFQ 0.00 0.00 0.33 0.00 0.33 0.33
A8AZ39QM2A9SO  0.13 0.54 0.18 0.13 0.00 0.03
Run Code Online (Sandbox Code Playgroud)

然后制作一个热图,其中包含现在有色单元格中的每个值.

制作热图很容易:

> heatmap( partb, Rowv=NA, Colv=NA, col = heat.colors(256),  margins=c(5,10))
Run Code Online (Sandbox Code Playgroud)

但是对于我的生活,我无法弄清楚如何将价值放在每个细胞中.

我错过了什么?当然这是常见的事情.

r heatmap

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

如何为R CMD检查设置testthat?

有显然是为了整合两种方式testthat使用R CMD check.我无法上班.

方法#1 :(可能已弃用)

根据devtools维基:

在开发包时,将测试放在inst/tests中,然后创建一个文件tests/run-all.R(注意它必须是大写R),其中包含以下代码:

library(testthat) 
library(mypackage)
test_package("mypackage") 
Run Code Online (Sandbox Code Playgroud)

这将评估您在包命名空间中的测试(因此您可以测试非导出的函数),如果有任何测试失败,它将抛出错误.这意味着您将看到测试失败的完整报告,并且除非所有测试都通过,否则R CMD检查将不会通过.

整个包裹都在这里.它是两个文件:

## minimalbugexample/inst/tests/run-all.R
library(testthat)
library(minimalbugexample)
test_package('minimalbugexample')
Run Code Online (Sandbox Code Playgroud)

## minimalbugexample/inst/tests/test-use-Matrix-package.R
context("Intentional break")
  expect_that( TRUE, equals(FALSE))
Run Code Online (Sandbox Code Playgroud)

我的描述是

Package: minimalbugexample
Title: 
Description: 
Version: 0.1.1
Author: Nathan VanHoudnos <nathanvan@letterafterFmail.com>
Maintainer: Nathan VanHoudnos <nathanvan@letterafterFmail.com>
Depends:
    R (>= 3.0.1),
    Matrix (>= 1.0)
Suggests:
    testthat
License: GPL
LazyData: true
Collate:
    'minimalbugexample-package.r'
    'use-Matrix-package.R'
Run Code Online (Sandbox Code Playgroud)

安装软件包后,我可以正常运行测试(它们会失败,如预期的那样).

> test_package('minimalbugexample')
Intentional break : 1


1. Failure:  -------------------------------------------------------------------
TRUE not equal to FALSE …
Run Code Online (Sandbox Code Playgroud)

r testthat

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

如何让R的lapply(和mclapply)恢复随机数生成器的状态?

R忽略.Random.seed了lapply里面的设置.set.seed然而,使用工作正常.

一些代码:

# I can save the state of the RNG for a few seeds
seed.list <- lapply( 1:5, function(x) {
                        set.seed(x)
                        seed.state <- .Random.seed
                        print( rnorm(1) )
                        return( seed.state )}) 
#[1] -0.6264538
#[1] -0.8969145
#[1] -0.9619334

# But I get different numbers if I try to restore 
# the state of the RNG inside of an lapply
tmp.rest.state <-  lapply(1:5, function(x) { 
                        .Random.seed <- seed.list[[x]]
                        print(rnorm(1))})
# [1] -0.2925257
# [1] 0.2587882
# [1] -1.152132 …
Run Code Online (Sandbox Code Playgroud)

random r lapply mclapply

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

如何从使用内联的C++过渡到制作自己的R包?

这里有两件事:(1)我正在学习如何使用Rcpp和朋友来更快地制作我的R代码;(2)我之前从未构建过R包.

我已经使用了inlinedown.很棒的套餐.爱它.但是,我似乎无法使用inlinewith 开发的任何代码package.skeleton来制作R包.

这是一个最小的例子:

第1步:制作R脚本

#############################
# File : build-R-pacakge.R  #
#############################
require(inline)
require(Rcpp)
require(RcppArmadillo)

# Define a simple cxxfunction
plus.two.cpp.src <- '
    arma::mat U = Rcpp::as<arma::mat>(UmatrixR);
    return(Rcpp::wrap(U+2));
'
plus.two.cpp <- cxxfunction(
             signature(UmatrixR="numeric"),
             body=plus.two.cpp.src,
             plugin="RcppArmadillo")

# Define the analogous R function
plus.two.r <- function( x ) {
  return( x + 2 )
}
Run Code Online (Sandbox Code Playgroud)

第2步:将其构建为R包

在新的R会话运行中:

source('build-R-package.R')
RcppArmadillo.package.skeleton(name='inlineExample',
                 list=c('plus.two.cpp', 'plus.two.r'),
                 code_files='build-R-package.R')
Run Code Online (Sandbox Code Playgroud)

然后删除man/*.Rd文件,因为R没有放入"正常工作"的默认值.

$ rm inlineExample/man/*.Rd
Run Code Online (Sandbox Code Playgroud)

并运行:

$ R CMD build inlineExample/
<< snip …
Run Code Online (Sandbox Code Playgroud)

r inline package rcpp

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

在编写使用Matrix包的R包时,为什么我必须指定Matrix :: t()而不仅仅是t()?

考虑R会话中定义的以下简单函数:

nathanvan@nathanvan-N61Jq:~$ R

R version 3.0.1 (2013-05-16) -- "Good Sport"
... snip ... 
> make.a.Matrix <- function(data, nrow, ncol) {
+    require(Matrix)
+    return( Matrix(data, nrow=nrow, ncol=ncol))
+ }
> 
> transpose.a.Matrix <- function(data, nrow, ncol  ) {
+   return(t( make.a.Matrix(data, nrow=nrow, ncol=ncol) ))
+ }
> 
> make.a.Matrix(1:12, 3, 4)
Loading required package: Matrix
Loading required package: lattice
3 x 4 Matrix of class "dgeMatrix"
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11 …
Run Code Online (Sandbox Code Playgroud)

namespaces r sparse-matrix

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

Base R中的图例:可以填充某些线条上的绘图框吗?可以填充覆盖整个符号的绘图框吗?

我有一个带有重叠阴影置信区间的图,如下所示:

图的一部分

我非常希望用置信区间的颜色来标注这个图例.就像是:

传奇部分

除了,我想要两件事:

  1. 对于不在前两个条目上显示的框.
  2. 盒子在最后三个条目上延伸穿过点和最右边的部分.

(我使用基本R而不是ggplot2是出于某些特定于此应用程序的原因而无法解释的.)

这是一个重现图例的代码示例:

#Build a fake plot so that legend has somewhere to sit
xx <- seq(0,10,by=.1)
yy <- 2*xx + rnorm(length(xx),0,1)
plot(xx,yy)

#Build the legend
estNames <- c('est1','est2','est3')
legend('bottomright', 
        c("no box, no point","no box, no point",estNames) , 
        lty=c(rep('dotted',2),rep('solid',3)), 
        col=c('black','red',1,2,4),
        pch=c(-1,-1,rep(16,3)),
        lwd=1,
        fill=c( 0, 0,
            rep( c( rgb(0.5,0.5,0.1,0.25),
                rgb(0.5,0.1,0.1,0.25),
                rgb(0.1,0.1,0.5,0.25)), 2)),
        inset=0,bg='white') 
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.谢谢!

graphics r legend fill

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

当分组因子缺失值时,基本R中的boxplot可以显示'NA'吗?

我要这个:

以NA作为类别名称的箱线图

而且我认为传递na.action=na.pass给boxplot会让NA出现在分组名称中.以下是一些示例代码:

#Build a fake dataset
set.seed(212012)
nn = 100
sample_data <- data.frame( score = c( rpois(nn, 1), rpois(nn, 2),
                                      rpois(nn, 1.5), rpois(nn, 3)),
                          category = c( rep(0, nn), rep(1, nn), 
                                        rep(2, nn), rep(NA, nn) ))   

boxplot( score ~ category, data=sample_data, na.action=na.pass )
Run Code Online (Sandbox Code Playgroud)

但这产生了这个:

在此输入图像描述

获得我想要的"简单"方法是以下代码,但它对于探索性数据分析并不好:

sample_data$category2 <- sample_data$category
sample_data$category2[ is.na(sample_data$category) ] <- 'NA'
boxplot( score ~ category2, data=sample_data )
Run Code Online (Sandbox Code Playgroud)

来自R Guru的任何暗示?我能够从这个更一般的讨论中找到关于na.pass的内容,以及来自Ripley教授的na.pass的起源.但是,数据中出现的缺失数据(NA)与因子本身的缺失数据之间似乎没有区别.我错过了一些简单的东西,还是这更像是一个功能请求?

r missing-data boxplot

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

重命名数据框中的几列:为什么不使用%in%运算符保留顺序?

这是参考这个问题.

我想重命名一个大数据框中的列子集.我希望下面的代码来重命名列X4,X5,X6X7gradek,grade1,grade2,和grade3分别为:

set.seed(1)
in.df <- data.frame( matrix( rnorm(60), ncol=10) )
names(in.df) <- ifelse( names(in.df) %in% c('X4', 'X5', 'X6', 'X7'),
                         paste('grade', c('k',1:3), sep=''),
                         names(in.df) )
Run Code Online (Sandbox Code Playgroud)

然而,

> names(in.df)
 [1] "X1"     "X2"     "X3"     "grade3" "gradek" "grade1" "grade2" "X8"    
 [9] "X9"     "X10"   
Run Code Online (Sandbox Code Playgroud)

即使

> paste('grade', c('k',1:3), sep='')
[1] "gradek" "grade1" "grade2" "grade3"
Run Code Online (Sandbox Code Playgroud)

显示订单未保留.这个线程,建议使用match而不是%in%工作,但在这种情况下它不会.(也许在其他版本的R中也是如此.在我安装的版本(2.15.3)中,帮助页面match建议%in%通过match这样定义,因此将其切换起来没有任何帮助.) …

r

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

在绘图的空白区域中打印data.frame

我希望将输出print(df.to.print)打印在绘图上.如果我可以在"传奇"(...)的调用中放置toplefttopright喜欢这个位置会很棒,但这只是一个奖励.

一些代码:

# A data.frame to play with
df.to.print <- structure(list(p.val = c(0.05, 0.1), self = c(0.0498, 0.0997), 
    H2007.REML = c(0, 0.01), H2007.ref = c(0, 0)), .Names = c("p.val", 
"self", "H2007.REML", "H2007.ref"), row.names = c(NA, -2L), class = "data.frame")

# A simple plot
plot(1)
text(1,1, df.to.print )
# All of the entries are overlapping

# I can insert newlines easily enough
plot(1)
text(1,1, paste(as.character(df.to.print), collapse='\n'))

# But that looses all of the nice formatting …
Run Code Online (Sandbox Code Playgroud)

plot r

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

使用list()在函数内部提取data.table

我必须承认data.table j语法让我困惑.

我正在尝试使用data.table FAQ的1.4节中描述的list()提取a的子集data.table作为data.table对象,但我无法在函数内部使用此行为.

一个例子:

require(data.table)

## Setup some test data
set.seed(1)
test.data <- data.table( X = rnorm(10),
                         Y = rnorm(10),
                         Z = rnorm(10) )
setkey(test.data, X)

## Notice that I can subset the data table easily with literal names
test.data[, list(X,Y)]
##              X           Y
##  1: -0.8356286 -0.62124058
##  2: -0.8204684 -0.04493361
##  3: -0.6264538  1.51178117
##  4: -0.3053884  0.59390132
##  5:  0.1836433  0.38984324
##  6:  0.3295078  1.12493092
## …
Run Code Online (Sandbox Code Playgroud)

r data.table

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