小编ran*_*tic的帖子

分面时ggplot geom_errorbar的宽度(和scale ="free")

我正在尝试使用ggplot和geom_errorbar创建一个多面图.但是,每个不同的小平面可能具有非常不同的x范围,因此误差条的宽度看起来并不"好".这是一个MWE:

library(ggplot2)
test <- data.frame( group=rep(c(1,2,3),each=10), ymin=rnorm(30), ymax=rnorm(30))
test$x <- rnorm(30) * (1+(test$group==1)*20)
ggplot( test, aes(x=x, ymin=ymin, ymax=ymax) ) +
  geom_errorbar(width=5) + facet_wrap( ~ group, scale="free_x" )
ggplot( test, aes(x=x, ymin=ymin, ymax=ymax) ) +
  geom_errorbar(width=.2) + facet_wrap( ~ group, scale="free_x" )
Run Code Online (Sandbox Code Playgroud)

在第一个图中,组1的误差条看起来很棒,但是2和3的距离太宽.在第二个图中,错误条对于组1来说太小了.有一种简单的方法可以解决这个问题吗?我想我可能只需要使用width = 0,但我想避免这种情况.

第一个情节

第二个情节

plot r ggplot2

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

在R中绘制的分屏(具有不相等的窗口)

我知道我可以使用par(mfrow=c(1, 2))分屏创建一个情节.但是,我真的想创建一个绘图,其中2/3的窗口用于绘制一个图形,窗口的1/3用于绘制另一个图形.这可能吗?

plot r

7
推荐指数
2
解决办法
8524
查看次数

用lme4预测新的水平

我正在尝试拟合混合效果模型,然后使用该模型生成可能具有不同级别的新数据集的估计值.我预计新数据集的估计值将使用估计参数的平均值,但情况似乎并非如此.这是一个最小的工作示例:

library(lme4)
d = data.frame(x = rep(1:10, times = 3),
               y = NA,
               grp = rep(1:3, each = 10))
d$y[d$grp == 1] = 1:10 + rnorm(10)
d$y[d$grp == 2] = 1:10 * 1.5 + rnorm(10)
d$y[d$grp == 3] = 1:10 * 0.5 + rnorm(10)
fit = lmer(y ~ (1+x)|grp, data = d)
newdata = data.frame(x = 1:10, grp = 4)
predict(fit, newdata = newdata, allow.new.levels = TRUE)
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我基本上定义了三组具有不同回归方程(斜率为1,1.5和0.5).但是,当我尝试使用看不见的级别预测新数据集时,我会得到一个恒定的估计值.我本来期望斜率和截距的预期值用于生成这个新数据的预测.我期待错误的事吗?或者,我的代码出了什么问题?

r prediction lme4 random-effects mixed-models

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

确定绘图中文本的实际宽度

我正在x轴上绘制一个因子,因此每个点都标有因子的名称.由于水平绘制时文本会重叠,因此我将其垂直绘制.但是,我偶尔会遇到x轴边距不够大的问题.所以,我的问题是:有没有办法确定文本字符串在绘制时的长度(例如英寸)?

plot text r margin

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

为何选择返回?

我正在阅读"SAMS在21天内自学C++",我遇到了一个我似乎无法理解的例子:

#include<iostream>

using namespace std;

class Counter
{
  public:
    Counter() {itsVal=0;}
    const Counter& operator++ ();
    int GetItsVal() {return itsVal;}
  private:
    int itsVal;
};

const Counter& Counter::operator++()
{
  ++itsVal;
  return *this;
}

int main()
{
  Counter i;
  Counter a = ++i;
  cout << "a: " << a.GetItsVal() << " i: " << i.GetItsVal() << endl;
  ++a;
  cout << "a: " << a.GetItsVal() << " i: " << i.GetItsVal() << endl;
}
Run Code Online (Sandbox Code Playgroud)

为什么++运算符的声明中有"&"?我理解这意味着++运算符的返回类型是一个引用,但它似乎不是对i的引用(因为递增a不会增加i).我注意到如果我同时删除"&",代码会返回相同的结果,但可能效率不高.

c++ return reference return-type

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

R CMD 检查失败并显示“未定义的导出”

我正在尝试创建一个 R 包,但我不断收到错误消息:

Error in namespaceExport(ns, exports) : 
  undefined exports: MCLE, defineFunctions, naiveMLE
Run Code Online (Sandbox Code Playgroud)

R CMD check在我的包上运行时。我正在使用roxygen2,错误消息中列出的三个函数是三个带@export标签的函数。我检查了堆栈溢出的类似问题/解决方案:

但这些似乎都不能解决我的问题(我没有使用<<-,我没有使用通用帮助页面导出任何函数,问题不ggplot2在于 CRAN 上的 R 包或不同的 R 包)。

我在删除NAMESPACE文件后构建了包,并且构建成功。我还确认包中的函数被列为“未定义”,我不知道还有什么要检查的!

export r package roxygen2

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

将名称-值对转换为 R 中的函数参数

我正在编写一个 R 函数,例如 foo()。我希望能够传入参数的名称和值以在 foo() 内的函数中进行计算。例如:

foo = function(inputArg, inputVal){
  return( rnorm(100, inputArg=inputVal) )
}
Run Code Online (Sandbox Code Playgroud)

然后,我可以评估

foo("sd", 2)
Run Code Online (Sandbox Code Playgroud)

并获得一个由 100 个随机正态值组成的向量,标准差等于 2。我该怎么做?

arguments r function

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

理解R中的黄土错误

我正在尝试使用黄土拟合模型,并且我遇到诸如"在3处使用伪逆","邻域半径1"和"倒数条件数0"之类的错误.这是一个MWE:

x = 1:19
y = c(NA,71.5,53.1,53.9,55.9,54.9,60.5,NA,NA,NA
      ,NA,NA,178.0,180.9,180.9,NA,NA,192.5,194.7)
fit = loess(formula = y ~ x,
        control = loess.control(surface = "direct"),
        span = 0.3, degree = 1)
x2 = seq(0,20,.1)
library(ggplot2)
qplot(x=x2
    ,y=predict(fit, newdata=data.frame(x=x2))
    ,geom="line")
Run Code Online (Sandbox Code Playgroud)

我意识到我可以通过选择更大的跨度值来修复这些错误.但是,我正在尝试自动化这种拟合,因为我有大约100,000个时间序列(每个长度大约20个)与此类似.有没有办法可以自动选择一个可以防止这些错误的跨度值,同时仍能提供相当灵活的数据拟合?或者,任何人都可以解释这些错误的含义吗?我在loess()和simpleLoess()函数中做了一些讨论,但是在调用C代码时我放弃了.

r loess

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

"矢量化"矩阵乘法

假设我有两个矩阵x和y,两者的尺寸都是100x2.我想创建一个列表,对于x和y的每一行,我有矩阵t(x)%*%y.例如,通过for循环:

x = matrix(rnorm(10), nrow = 5)
y = matrix(rnorm(10), nrow = 5)
myList = list()
for(i in 1:5){
    myList[[i]] = t(x[i, , drop = FALSE]) %*% y[i, ]
}
Run Code Online (Sandbox Code Playgroud)

有更有效的方法来进行此计算吗?我试图找出如何表达矩阵乘法,但没有运气.我也考虑了mapply,但似乎我需要将x和y转换为向量列表而不是矩阵才能使用mapply,而且我怀疑这是正确的方法.

r matrix matrix-multiplication

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

动画googleVis图

我真的很喜欢动态图表在这里的样子,但我想为其他一些图表(而不仅仅是散点图表)制作动画.

例如,是否可以设置烛台图的动画?

r candlestick-chart googlevis

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

rollapply与动物园和次日数据

我有一个具有不等间距观测值的数据集,并且经常观察每天发生一次以上.我想将一个函数应用于我的数据的窗口,但我希望窗口是按时间而不是按行定义的.例如,我想在我的数据集中计算第1-5天,第2-6天等的平均值,第1-5天可能对应于行1-13,第2-6天对应于第3行18等

我看到该rollapply函数接受了zoo对象,我认为它可以像我上面描述的那样工作(即将函数应用于由时间定义的窗口而不是由行定义的窗口).但是,情况似乎并非如此:

my.ts = zoo( 1:100, as.Date("201401","%Y%j")+1:100 )
mean1 = rollapply( my.ts, 3, mean, align="right" )
my.ts = zoo( 1:100, as.Date("201401","%Y%j")+1:100/2 )
mean2 = rollapply( my.ts, 3, mean, align="right" )
all( mean1==mean2 )
Run Code Online (Sandbox Code Playgroud)

我期望mean2从不同的mean1,因为mean2有每天,而不是一两点意见.但是,似乎rollapply使用行来定义窗口而不是来自zoo对象的时间.有解决办法吗?或者,我应该使用其他一些功能代替rollapply

r time-series zoo rollapply

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

独特的data.table工作不正确

我在data.table中发现了一些有趣的行为,如果有人可以向我解释为什么会这样,我很好奇.我正在合并两个data.tables(在这个MWE中,一个有1行,另外2行).合并的data.table有两个唯一的行,但是当我在合并的data.table上调用unique()时,我得到一行data.table.难道我做错了什么?或者这是一个错误?

这是一个MWE:

library(data.table)
X = data.table(keyCol = 1)
setkey(X, keyCol)
Y = data.table(keyCol = 1, otherKey = 1:2)
setkeyv(Y, c("keyCol", "otherKey"))
X[Y, ] # 2 unique rows
unique(X[Y, ]) # Only 1 row???
Run Code Online (Sandbox Code Playgroud)

我期望唯一(X [Y,])与X [Y,]相同,因为所有行都是唯一的,但似乎并非如此.

r unique data.table

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