我正在尝试使用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,但我想避免这种情况.


我知道我可以使用par(mfrow=c(1, 2))分屏创建一个情节.但是,我真的想创建一个绘图,其中2/3的窗口用于绘制一个图形,窗口的1/3用于绘制另一个图形.这可能吗?
我正在尝试拟合混合效果模型,然后使用该模型生成可能具有不同级别的新数据集的估计值.我预计新数据集的估计值将使用估计参数的平均值,但情况似乎并非如此.这是一个最小的工作示例:
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).但是,当我尝试使用看不见的级别预测新数据集时,我会得到一个恒定的估计值.我本来期望斜率和截距的预期值用于生成这个新数据的预测.我期待错误的事吗?或者,我的代码出了什么问题?
我正在x轴上绘制一个因子,因此每个点都标有因子的名称.由于水平绘制时文本会重叠,因此我将其垂直绘制.但是,我偶尔会遇到x轴边距不够大的问题.所以,我的问题是:有没有办法确定文本字符串在绘制时的长度(例如英寸)?
我正在阅读"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).我注意到如果我同时删除"&",代码会返回相同的结果,但可能效率不高.
我正在尝试创建一个 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文件后构建了包,并且构建成功。我还确认包中的函数被列为“未定义”,我不知道还有什么要检查的!
我正在编写一个 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。我该怎么做?
我正在尝试使用黄土拟合模型,并且我遇到诸如"在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代码时我放弃了.
假设我有两个矩阵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,而且我怀疑这是正确的方法.
我有一个具有不等间距观测值的数据集,并且经常观察每天发生一次以上.我想将一个函数应用于我的数据的窗口,但我希望窗口是按时间而不是按行定义的.例如,我想在我的数据集中计算第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?
我在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 ×11
plot ×3
arguments ×1
c++ ×1
data.table ×1
export ×1
function ×1
ggplot2 ×1
googlevis ×1
lme4 ×1
loess ×1
margin ×1
matrix ×1
mixed-models ×1
package ×1
prediction ×1
reference ×1
return ×1
return-type ×1
rollapply ×1
roxygen2 ×1
text ×1
time-series ×1
unique ×1
zoo ×1