来自help("'")
:
单引号和双引号分隔字符常量.它们可以互换使用,但首选双引号(字符常量使用双引号打印),因此单引号通常仅用于分隔包含双引号的字符常量.
如果它们可以互换,为什么双引号是首选?在我自己的用法中,我还没有找到它们之间的区别.特别令人惊讶的是混合字符向量是允许的:
> c("a",'b',"c")
[1] "a" "b" "c"
Run Code Online (Sandbox Code Playgroud)
编辑
我想在这里问两个问题,我想:
'
和"
行为不同?"
按惯例选择首选版本?到目前为止,答案与(2)有关,但(1)至少与兴趣有关.
当我使用%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) 在回答最近的可视化问题时,我真的需要大括号来显示轴上的跨度,我无法弄清楚如何在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
)我经常遇到这种情况,我认为必须有一个很好的成语.假设我有一个包含一系列属性的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) 使用命令paste
在R,我想用两个参数sep
和collapse
,但不能缩写collapse
来coll
,甚至collaps
.然而对于其他功能,部分缩写起作用.
没有其他参数可以开始崩溃coll
,这会干扰部分参数匹配.
为什么我必须在调用paste
时键入整个参数名称,当我不需要其他函数时?
使用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对象都有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代码是如何工作的吗?
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)
代码执行我想做的事情(按组分配最大值),但问题是这是如何完成的?
假设我有一个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没有做任何事情,我找不到任何有用的信息.