小编bri*_*ndk的帖子

当我的ggplot2语法合理时,如何处理R CMD检查"没有可见的全局变量绑定"注释?

编辑:哈德利威克姆指出我错过了.R CMD检查是投掷NOTES,而不是警告.我非常抱歉这种混乱.这是我的疏忽.

简短的版本

R CMD check每次我在ggplot2中使用合理的绘图创建语法时都会抛出此注释:

no visible binding for global variable [variable name]
Run Code Online (Sandbox Code Playgroud)

我理解为什么R CMD检查会这样做,但它似乎将整个其他合理的语法定为犯罪.我不知道采取什么措施来让我的包裹通过R CMD check并获准进入CRAN.

的背景

Sascha Epskamp之前基本上发布了相同的问题.我认为,不同之处在于它的手册subset()说它是专为交互式使用而设计的.

就我而言,问题还没有结束,subset()而是超出了一个核心特征ggplot2:data =争论.

我编写的代码示例生成这些注释

这里的一个子功能我的包,增加了指向一个情节:

JitteredResponsesByContrast <- function (data) {
  return(
    geom_point(
             aes(
               x = x.values, 
               y = y.values
             ),
             data     = data,
             position = position_jitter(height = 0, width = GetDegreeOfJitter(jj))
    )
  )
}
Run Code Online (Sandbox Code Playgroud)

R CMD …

r ggplot2

169
推荐指数
6
解决办法
2万
查看次数

如何使用grid.arrange安排任意数量的ggplots?

这是在ggplot2 google群组上交叉发布的

我的情况是我正在处理一个输出任意数量的图形的函数(取决于用户提供的输入数据).该函数返回一个n个图的列表,我想将这些图以2 x 2的形式排列.我正在努力解决以下问题:

  1. 如何允许灵活地交给任意(n)个数量的图?
  2. 我怎么能指定我希望它们布局为2 x 2

我目前的策略是grid.arrangegridExtra包中使用.它可能不是最佳的,特别是因为,这是关键,它完全不起作用.这是我评论的示例代码,试验了三个图:

library(ggplot2)
library(gridExtra)

x <- qplot(mpg, disp, data = mtcars)
y <- qplot(hp, wt, data = mtcars)
z <- qplot(qsec, wt, data = mtcars)

# A normal, plain-jane call to grid.arrange is fine for displaying all my plots
grid.arrange(x, y, z)

# But, for my purposes, I need a 2 x 2 layout. So the command below works acceptably.
grid.arrange(x, y, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

93
推荐指数
2
解决办法
3万
查看次数

如何操作facet_grid图的条带文本?

我想知道如何在刻面图中操纵条带文本的大小.我的问题类似于关于情节标题的问题,但我特别关注的是不是操纵情节标题而是出现在方面标题中的文本(strip_h).

例如,考虑mpg数据集.

    library(ggplot2) 
    qplot(hwy, cty, data = mpg) + facet_grid( . ~ manufacturer)
Run Code Online (Sandbox Code Playgroud)

结果输出会生成一些不适合条带的构面标题.

我认为必须有一种方法grid来处理条带文本.但我仍然是一个新手,并且不确定哈德利书中grid附录是如何做到的.此外,我担心如果我做错了会破坏我的洗衣机,因为我相信所有的技术都通过The Force连接:-(

提前谢谢了.

r ggplot2

83
推荐指数
3
解决办法
5万
查看次数

roxygen2会自动为"Imports:"包编写NAMESPACE指令吗?

tl;我的问题的博士版本

如果我想导入包,是否必须手动将import()指令写入我的NAMESPACE文件?似乎roxygen2对我来说不会神奇地做到这一点,即使我在他的描述中将它们列为"Imports:".

富勒版

这是一个非常愚蠢的问题,但我问,因为答案对我来说并不明显.

roxygen2用来处理我的R包文档.当我想确保导出函数时,我@export在其roxygen块中添加了一个标记.后续运行roxygenize()将相应地编写NAMESPACE指令.

但是,我的包目前正在导入其他几个:

Depends:
    R (>= 2.13.0),
    ggplot2 (>= 0.8.9)
Imports:
    RColorBrewer,
    plyr,
    gridExtra
Run Code Online (Sandbox Code Playgroud)

看来虽然roxygen2 导出的函数重写NAMESPACE指令,但它不会自动重写NAMESPACE以反映我指定的包应该在我的DESCRIPTION中导入.

r roxygen roxygen2

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

如何将多个ggplot2元素组合到函数的返回中?

如果我尝试手动编写ggplot2绘图的某些元素,它可以正常工作:

> p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
> p + geom_vline(xintercept = 20) + geom_point(data = mtcars)
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试将一些组合捆绑到一个函数中,我会收到一个错误:

> myFunction <- function() {
+   return(
+     geom_vline(xintercept = 20) + geom_point(data = mtcars)
+   )
+ }
> p <- ggplot(aes(x = mpg, y = hp), data = mtcars)
> p + myFunction()
Error in geom_vline(xintercept = 20) + geom_point(data = mtcars) : 
  non-numeric argument to binary operator
Run Code Online (Sandbox Code Playgroud)

ggplot2是否因为ggplot2 …

r ggplot2

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

我们如何测试构建R包时未暴露的函数?

我正在为R 开发一个图形分析包.我们正在尝试使用清洁代码测试驱动开发(TDD)中的原则.但是,我们遇到了一个概念问题.

你怎么测试未曝光的功能?

请考虑以下简化示例.Outer()是我们在包中构建的函数,我们通过将其列在NAMESPACE文件中将其公开给用户.Inner()是一个简短的(~5行)效用函数:

Outer <- function(...) {

  Inner <- function(...) {
    return(x)
  }

  return( Inner() )
}
Run Code Online (Sandbox Code Playgroud)

我们程序包中的大多数用户公开函数都是简短的单行为Inner()样式函数的集合,这些Outer()函数位于用户可以调用的单个函数的保护之下.Granova.ds.ggplot()就是一个例子.Clean Code强烈倡导这种模块化设计,我们对结果非常满意.但是我们不知道如何为它构建单元测试,因为我们想要测试的Granova.ds.ggplot()函数在我们设计它的方式之外的函数范围之外是不可访问的.

我们遇到了几个想法/解决方案:

  1. 测试应该只能访问公共API.由于Inner()设计的功能不是公开的(它们不会被导出NAMESPACE),我们甚至不应该尝试测试它们.
  2. Hadley Wickham的testthat 软件包维基说它支持使用R CMD check工作流程测试"非导出功能" .
  3. 如果所有其他方法都失败了,我们可能会以某种方式手动破坏我们的Outer()功能以进

到目前为止,这些解决方案都没有奏效

解决方案1似乎是一个警察.我们相信,特别是在R中,拥有一个称为各种简短,单一责任的实用方法的顶级函数是明智的.不能测试这样的方法似乎很愚蠢,就像那种类型的东西有一个解决方案,但我们还没有找到.

解决方案2可能会起作用,但到目前为止我们尚未开始工作.如果你尝试克隆我们的存储库,那么inst/dev.R我相信你会在测试输出中发现它找不到该函数InitializeGgplot(),即使所述函数是在613-615行中定义的granova.1w.ggplot().同样,R CMD …

tdd unit-testing r

15
推荐指数
2
解决办法
1412
查看次数

为什么git blame视图中的一行SHA有一个主要的插入符号(^)?

我不确定这种行为是否很奇怪,但是这就是发生了什么:似乎我git blame在一个文件上运行,该文件中来自初始提交的任何行都有一个SHA带有一个前导插入符号(^),就像这样

^bb65026 (Brian Danielak 2012-10-27 19:11:54 -0700 1) hello, world!
bbcd4a96 (Brian Danielak 2012-10-27 19:11:54 -0700 2) hello again!

重现步骤

从终端提示:

mkdir newProject
cd newProject
git init
echo 'hello, world!' >> testFile.txt
git add testFile.txt
git commit -m "Initial Commit"
git blame testFile.txt
Run Code Online (Sandbox Code Playgroud)

然后验证你的责备输出有一个主要的插入符号,就像我的那样(虽然你的SHA可能不匹配)

^bb65026 (Brian Danielak 2012-10-27 19:11:54 -0700 1) hello, world!
Run Code Online (Sandbox Code Playgroud)

作为测试,您可以尝试向文件添加第二行并重新提交,以查看只有第一行的哈希值包含一个主要的插入符号

echo 'hello again!' >> testFile.txt
git add testFile.txt
git commit -m "Initial Commit"
git blame testFile.txt
Run Code Online (Sandbox Code Playgroud)

我的责备输出现在看起来像这样:

^bb65026 (Brian Danielak 2012-10-27 …

git

14
推荐指数
2
解决办法
1449
查看次数

如何使用YAML块指定pandoc的降价扩展?

背景

Pandoc的markdown允许您指定您希望如何处理降价的扩展:

可以通过附加+EXTENSION-EXTENSION格式名称单独启用或禁用Markdown语法扩展.因此,例如,markdown_strict+footnotes+definition_lists是否启用了脚注和定义列表的严格降价,并且markdown-pipe_tables+hard_line_breaks是没有管道表和硬换行符的pandoc标记.

我的具体问题

对于给定的pandoc转换,例如,我在源代码中使用网格表:

pandoc myReport.md --from markdown+pipe_tables --to latex -o myReport.pdf
Run Code Online (Sandbox Code Playgroud)

如何编写pandoc YAML块来完成同样的事情(指定我的源包含网格表?)

我问题的一般概括形式

如何使用pandoc YAML打开和关闭扩展?

Stack Overflow我不认为完全回答我的问题的问题

也许没有办法做到这一点

pandoc的设计总是可以让您在YAML中指定这些扩展名.虽然,我希望它是.

markdown yaml pandoc rstudio r-markdown

14
推荐指数
2
解决办法
7904
查看次数

为什么ggplot2图例不会结合手动填充和缩放值?

预期的行为

如果我使用ggplot2创建一个绘图并使用单独的,比如形状和填充刻度来描绘数据,我希望图例将描绘"白色"填充点(看起来是空心的)和"黑色"填充点(不看起来)之间空心).

在下面的示例代码中,Windows的图例项应该是一个白色空心点,Linux的图例应该是黑色填充点

实际行为

"操作系统"下的图例项描述了两个视觉上相同的点,用于明显不同的操作系统,其点在图上用不同的填充清晰地绘制.在下面的示例代码中,Windows和Linux在图例中显示为无法区分的黑色空心点,即使它们在绘图本身上的绘制方式也不同.

样本图

图例中带有破碎填充行为的样本图http://f.cl.ly/items/2w2i09103Q2p0i3M1Y2d/BrokenFillRplot.png

示例代码

library(ggplot2)

x <- rnorm(n = 30)
y <- rnorm(n = 30)
treatment <- rep(c("red", "green", "blue"), times = 20)
operatingSystem <- rep(c("Windows", "Linux"), times = 30)

dd <- data.frame(x, y, treatment, operatingSystem)

fillScaleValues <- c(
  "Windows" = "white",
  "Linux" = "black"
)

shapeScaleValues <- c(
  "red" = 21,
  "green" = 22,
  "blue" = 23
)

p <- ggplot(
      aes(x = x, 
          y = y,
          shape = factor(treatment),
          fill = factor(operatingSystem)
      ), data …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

如何在保留某些对象的同时整洁地清理我的R工作区?

假设我通过将矢量绑定在一起来搞乱一些数据,正如我在一个懒惰的周日下午所做的那样.

    x <- rnorm(25, mean = 65, sd = 10)
    y <- rnorm(25, mean = 75, sd = 7)
    z <- 1:25

    dd <- data.frame(mscore = x, vscore = y, caseid = z)
Run Code Online (Sandbox Code Playgroud)

我现在有了新的数据帧dd,这太棒了.但是我的先前的切片和切片仍然存在碎屑:

    > ls()
    [1] "dd"        "x"          "y"          "z"         
Run Code Online (Sandbox Code Playgroud)

如果我不再需要"源"列,那么清理工作区的简单方法是什么,但我想保留数据帧?也就是说,既然我已经完成了操作我想要的数据,dd并且没有任何较小的变量可能会无意中掩盖进一步的分析:

    > ls()
    [1] "dd"
Run Code Online (Sandbox Code Playgroud)

我觉得解决方案必须是形式rm(ls[ -(dd) ])或东西,但我无法弄清楚如何说"请清理一切,但以下的对象."

statistics r

11
推荐指数
2
解决办法
7305
查看次数

标签 统计

r ×8

ggplot2 ×5

git ×1

markdown ×1

pandoc ×1

r-markdown ×1

roxygen ×1

roxygen2 ×1

rstudio ×1

statistics ×1

tdd ×1

unit-testing ×1

yaml ×1