小编tom*_*mka的帖子

是否有可能加快我创建相关矩阵的功能?

我已经编写了以下函数来估计使用所谓的CramérV的多项式变量的成对相关性.我vcd为此目的使用了包,但据我所知,没有现有的函数会从矩阵或data.frame类似的函数创建V的对称相关矩阵cor.

功能是:

require(vcd)
get.V<-function(y){
  col.y<-ncol(y)
  V<-matrix(ncol=col.y,nrow=col.y)
  for(i in 1:col.y){
    for(j in 1:col.y){
      V[i,j]<-assocstats(table(y[,i],y[,j]))$cramer
    }
  }
  return(V)
}
Run Code Online (Sandbox Code Playgroud)

但是,对于大量变量,它变得相对较慢.

no.var<-5
y<-matrix(ncol=no.var,sample(1:5,100*no.var,TRUE))
get.V(y)
Run Code Online (Sandbox Code Playgroud)

随着您的增加,no.var计算时间可能会爆炸.由于我需要将其应用于data.frame100和更高的长度,我的问题是,是否有可能通过更优雅的编程来"加速"我的功能.谢谢.

performance r matrix correlation

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

Win7下Jupyter Notebook撤销文本输入

我很惊讶我没有在 Win7 下的 Jupyter Notebook 上或在网上找到这个问题的答案。

我只是错误地覆盖了调用块的大部分,但不是全部。自动保存可以追溯到我不想恢复的一些以前的更改。Jupyter Notebook中文本条目的撤消功能在哪里?

jupyter-notebook

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

两个列表的总和

我通常如何取包含一致矩阵的两个列表的元素之和?

  l1<-list(matrix(1,3,3),matrix(2,3,3))
  l2<-list(matrix(3,3,3),matrix(4,3,3))
Run Code Online (Sandbox Code Playgroud)

其中总和定义为:

  l3<-list(l1[[1]]+l2[[1]],l1[[2]]+l2[[2]])
Run Code Online (Sandbox Code Playgroud)

和“一般”意味着任何大小的矩阵和任何长度的列表。

r list matrix

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

在R中,(F&NA)是F但是(T&NA)是NA - 为什么?

为什么这样R呢?

> F & NA
[1] FALSE
> T & NA
[1] NA
Run Code Online (Sandbox Code Playgroud)

我希望代码的第一行也可以进行评估NA.人们告诉我'这只是R'的奇怪行为,但还有其他一些概念吗?

r logical-operators na

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

由于 class(x) 返回矩阵和数组,旧 R 包中出现错误 - 这是新的吗?

我正在使用一个名为PIMixture请参阅此处)的旧包,它在代码的各个位置引发了很多错误。它们看起来都像这样或类似(以下几行实际上来自可重现的示例):

> library(PIMixture)
> data(PIdata)
> model<-"C_CIN3PLUS+L_CIN3PLUS+R_CIN3PLUS~RES_HPV16"
> fit1<-PIMixture(p.model=model,data=PIdata1, model="logistic-Weibull")
Error in if (class(mat2) == "numeric") { : the condition has length > 1
Run Code Online (Sandbox Code Playgroud)

经过调查我发现

> class(mat2)
[1] "matrix" "array" 
Run Code Online (Sandbox Code Playgroud)

因此 if 子句返回错误。我不敢相信这是开发包时的一个问题,因为它会被注意到。因此我想知道在 R 的早期版本中是否class(mat2)可能评估为"Matrix"only,因此长度为 1。我可以在源代码中应用修复,PIMixture如下所示:class(mat2)[1]。不太好,但是这个包就可以工作了。我想知道这个问题是否是由于 R 跨版本的更改而发生的,或者为什么会发生这个问题。

arrays r version matrix

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

使用pyplot创建图的网格

我是python的新手,使用进行绘图时有些困难pyplot。我的目标是%pylab inline在Juypter Notebook中在线绘制图的网格()。

我编写了一个函数plot_CV,该函数在一些x的多项式的阶上绘制交叉验证erorr,而在整个图中,惩罚程度(lambda)应当变化。最终在lambda中有10个元素,它们由中的第一个参数控制plot_CV。所以

fig = plt.figure()
ax1 = fig.add_subplot(1,1,1) 
ax1 = plot_CV(1,CV_ve=CV_ve)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

现在,我想我必须add_subplot像在

fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax1 = plot_CV(1,CV_ve=CV_ve)
ax2 = fig.add_subplot(2,2,2)
ax2 = plot_CV(2,CV_ve=CV_ve)
ax3 = fig.add_subplot(2,2,3)
ax3 = plot_CV(3,CV_ve=CV_ve)
ax4 = fig.add_subplot(2,2,4)
ax4 = plot_CV(4,CV_ve=CV_ve)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是,如果我继续这样做,则图将变得越来越小,并开始在x和y标签上重叠。这是一张3 x 3的图片。

在此处输入图片说明

有没有一种方法可以均匀分布图,以使其不重叠并更好地利用Jupyter Notebook中的水平和垂直在线空间?为了说明这一点,这里提供了jupyter的屏幕截图:

在此处输入图片说明

最后说明:我仍然需要添加标题或注释,其中包含当前使用的lambda级别plot_CV


编辑:使用建议的紧密布局,给出:

在此处输入图片说明


编辑2:使用fig.set_figheightfig.set_figwidth我最终可以使用可用的全长和高度。

在此处输入图片说明

python plot matplotlib

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

如何在data.frame(在R中)中跨越多个因素应用复杂函数?

我想在一个data.frame与所做的相似的交叉因子水平上应用一个函数aggregate,但是对于比aggregate可以处理的更复杂的函数.

例如.

fact1=c(rep('A',6),rep('B',6))
fact2=c(rep(c(rep('C',3),rep('D',3)),2))
crit1=rnorm(12)
crit2=crit1+rnorm(12)
dat=data.frame(fact1,fact2,crit1,crit2)

target.fit = function(dat){
  mod=lm(dat$crit2~dat$crit1)
  return(mod$coefficients[2])
}
Run Code Online (Sandbox Code Playgroud)

此代码生成一个data.frame dat.目标是适用target.fit于每个交叉级别fact1fact2(此处为lm).

对于仅需要一个输入向量的函数(例如均值使用),这很简单aggregate.

> aggregate(dat,list(fact1=fact1,fact2=fact2),mean)
  fact1 fact2 fact1 fact2      crit1      crit2
1     A     C    NA    NA -0.5875951 -0.6048572
2     B     C    NA    NA  0.3712372  0.9135742
3     A     D    NA    NA -1.0163750 -2.4971846
4     B     D    NA    NA  0.3937682  0.6227697
Run Code Online (Sandbox Code Playgroud)

但是,aggregate对于多变量输入不起作用.

> aggregate(dat,list(fact1=fact1,fact2=fact2),target.fit)
 Error in dat$crit2 : $ …
Run Code Online (Sandbox Code Playgroud)

aggregate r apply

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