小编Ari*_*man的帖子

为什么R中的"首选"

来自help("'"):

单引号和双引号分隔字符常量.它们可以互换使用,但首选双引号(字符常量使用双引号打印),因此单引号通常仅用于分隔包含双引号的字符常量.

如果它们可以互换,为什么双引号是首选?在我自己的用法中,我还没有找到它们之间的区别.特别令人惊讶的是混合字符向量是允许的:

> c("a",'b',"c")
[1] "a" "b" "c"
Run Code Online (Sandbox Code Playgroud)

编辑

我想在这里问两个问题,我想:

  1. 是否有任何情况'"行为不同?
  2. 如果没有,为什么"按惯例选择首选版本?

到目前为止,答案与(2)有关,但(1)至少与兴趣有关.

string r

18
推荐指数
2
解决办法
323
查看次数

R:foreach循环如何找到应该调用的函数?

当我使用%dopar%调用自定义函数的foreach循环(使用)时,我遇到了问题.使用Linux时没有真正的问题,但是当我使用Windows时,无法找到自定义的功能.很难用文字解释这个问题,所以我写了一个小例子来展示它.假设我有三个简单函数的集合,其中FUN2(using %do%)和FUN3(using %dopar%)调用第一个函数(FUN):

FUN <- function(x,y,z) { x + y + z }
FUN2 <- function(a, b) {
  foreach(i=1:3) %do% FUN(i, a, b)
}
FUN3 <- function(a, b) {
  foreach(i=1:3) %dopar% FUN(i, a, b)
}
Run Code Online (Sandbox Code Playgroud)

这些函数存储在一个名为的脚本中foreach_testfunctions.R.在另一个脚本(foreach.test)中我发布了这些函数,使用library(doParallel)并尝试使用这些函数.首先我用Linux做,一切正常:

source("foreach_testfunctions.R")
a <- 2
b <- 3
library(doParallel)
registerDoParallel()

foreach(i=1:3) %do% FUN(i, a, b)    ## works fine
FUN2(a, b)                          ## works fine
foreach(i=1:3) %dopar% FUN(i, a, b) ## …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach r mpi

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

ggplot2:轴上的花括号?

回答最近的可视化问题时,我真的需要大括号来显示轴上的跨度,我无法弄清楚如何在ggplot2中执行此操作.这是情节:

示例情节

而不是刻度线,我真的很喜欢y轴标签"双字母名字的第二个字母",从1到10(红色和蓝色第二个字母的垂直跨度)的支撑.但我不确定如何实现这一目标.x轴可以受益于类似的治疗.

代码在链接的CrossValidated问题中可用(并且对于此示例而言不必要地复杂,因此我不会显示它).相反,这是一个最小的例子:

library(ggplot2)
x <- c(runif(10),runif(10)+2)
y <- c(runif(10),runif(10)+2)
qplot(x=x,y=y) +
  scale_x_continuous("",breaks=c(.5,2.5),labels=c("Low types","High types") )
Run Code Online (Sandbox Code Playgroud)

最小的例子

在这种情况下,对于低类型的(0,1)和对于高类型的(2,3)的大括号将是理想的而不是刻度标记.

我宁愿不使用,geom_rect因为:

  • 刻度线将保留
  • 我更喜欢大括号
  • 它将在情节内而不是在它之外

我怎么做到这一点?完美的答案是:

  • 一个漂亮,光滑,薄的花括号
  • 在绘图区外绘制
  • 通过高级参数指定(理想情况下是传递给breaks选项的范围类型对象scale_x_continuous)

r ggplot2

17
推荐指数
4
解决办法
7145
查看次数

R中的人脸识别

是否有用R统计语言编写的人脸识别算法?如果没有,请提供我可能开始将其他算法转换为R的指导.

r face-recognition

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

用于多个类别的ifelse样式重新编码的习语

我经常遇到这种情况,我认为必须有一个很好的成语.假设我有一个包含一系列属性的data.frame,包括"product".我还有一把钥匙,可以将产品转化为品牌+尺寸.产品代码1-3是Tylenol,4-6是Advil,7-9是拜耳,10-12是Generic.

什么是最快的(就人类时间而言)编码方式?

ifelse如果有3个或更少的类别,我倾向于使用嵌套的;如果有超过3个类型,则键入数据表并将其合并.任何更好的想法?Stata有一个非常漂亮的recode命令,虽然我相信它会促进数据代码混合有点过分.

dat <- structure(list(product = c(11L, 11L, 9L, 9L, 6L, 1L, 11L, 5L, 
7L, 11L, 5L, 11L, 4L, 3L, 10L, 7L, 10L, 5L, 9L, 8L)), .Names = "product", row.names = c(NA, 
-20L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

r recode r-factor

17
推荐指数
6
解决办法
2519
查看次数

粘贴中"崩溃"的缩写?

使用命令paste在R,我想用两个参数sepcollapse,但不能缩写collapsecoll,甚至collaps.然而对于其他功能,部分缩写起作用.

没有其他参数可以开始崩溃coll,这会干扰部分参数匹配.

为什么我必须在调用paste时键入整个参数名称,当我不需要其他函数时?

r argument-matching

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

ggplot2对象的动态位置(特别是geom_text)?

使用ArcGIS制作地图时,默认情况下,软件会自动推送点和多边形标签,以避免使用专有算法重叠.他们将此称为动态标签. ggplot2具有position_jitter优异的分数(因为动态标签可能会产生系统偏差),但对标签使用不太好geom_text.

以下是动态标记算法可能解决的抖动问题的示例:

library(ggplot2)
ggplot( mtcars,aes( x=wt, y=mpg, label=rownames(mtcars) ) ) +
  geom_point() +
  geom_text( position=position_jitter(h=1,w=1) )
Run Code Online (Sandbox Code Playgroud)

标有问题的抖动标签

ggplot2中是否已经存在这样的动态标签功能?

如果没有,那么存在哪些算法,是否可以position_dynamic在R中实现?

r ggplot2

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

馊主意?ggplotting一个S3类对象

许多R对象都有S3方法来绘制与之关联的方法.例如,每个R回归教程都包含以下内容:

dat <- data.frame(x=runif(10))
dat$y <- dat$x+runif(10)
my.lm <- lm( y~x, dat )
plot(my.lm)
Run Code Online (Sandbox Code Playgroud)

其中显示回归诊断.

类似地,我有一个包含S3对象的包,它包含一个基本上包含几个时间序列的列表.我有一个plot.myobject方法,它进入列表,拉出时间序列,并在同一图表上绘制它们.我想将它重写为ggplot2函数,以便它更漂亮,也许更具可扩展性.

因为这个包的目的是让人们没有多少经验[R快速启动和运行,我想这是一个班轮有一个参数,如plot(myobject),ggplot(myobject)或任何适当的版本可能.然后,一旦他们迷上了,他们就可以了解更多关于ggplot2并根据他们内心的内容自定义图表.

我最初的诱惑是简单地替换plot.myobject方法的内部以使用ggplot2.然而,这似乎可能会失去我的主要风格点.

这是一个坏主意,如果是这样,为什么以及我应该使用哪种替代方案?

r ggplot2

16
推荐指数
2
解决办法
1164
查看次数

回收和分配功能(`split <-`)

有人可以解释一下这一行R代码是如何工作的吗?

split(dat, f) <- lapply(split(dat, f), max)
Run Code Online (Sandbox Code Playgroud)

我认为这只是一个回收规则,但实际上我无法理解.

数据示例:

dat <- c(1, 2, 3, 100, 200, 300)
f <- as.factor(c("a", "a", "b", "a", "b", "b"))
split(dat, f) <- lapply(split(dat, f), max)
dat
[1] 100 100 300 100 300 300
Run Code Online (Sandbox Code Playgroud)

代码执行我想做的事情(按组分配最大值),但问题是这是如何完成的?

syntax functional-programming r

16
推荐指数
2
解决办法
394
查看次数

每次运行时,如何避免打印R脚本?

假设我有一个R脚本:

library('nnet')    
something <- runif(50); 
print(something) 
Run Code Online (Sandbox Code Playgroud)

当我从命令行运行此脚本时,它会打印:

> library('nnet')
> something <- runif(5); 
> print(something)
 [1] 0.04665518 0.93574275 0.96387299 0.07410239 0.92834019
Run Code Online (Sandbox Code Playgroud)

我希望它只打印:

[1] 0.04665518 0.93574275 0.96387299 0.07410239 0.92834019
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何做到这一点.sink("/ dev/null")没有做任何事情,手动重定向stderr没有做任何事情,我找不到任何有用的信息.

r r-faq

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