首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过model.matrix使用rpy2?

通过model.matrix使用rpy2?
EN

Stack Overflow用户
提问于 2015-02-03 02:13:00
回答 1查看 1.9K关注 0票数 5

比起R,我更喜欢python的工作。有时,我需要使用R函数,为此我开始尝试使用Rpy2。

我尝试过,但未能找到如何使用Rpy2复制以下内容

代码语言:javascript
复制
design <- model.matrix(~Subject+Treat)

我已经做到了这一点:

代码语言:javascript
复制
import rpy2.robjects as robjects
fmla = robjects.Formula('~subject+treatment')
env = fmla.environment
env['subject'] = sbj_group
env['treatment'] = trt_group

从我看到的这里。但是我找不到如何执行model.matrix。我尝试了几种不同的方法:

代码语言:javascript
复制
robjects.r.model_matrix(fmla)
robjects.r('model.matrix(%s)' %fmla.r_repr())

如你所见,他们中没有一个是对的。

我是Rpy2的新手,在R.非常缺乏经验,任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2015-02-03 03:15:15

你可以将字符串计算为R代码

代码语言:javascript
复制
import numpy as np
import rpy2.robjects as ro
import rpy2.robjects.numpy2ri
ro.numpy2ri.activate() 
R = ro.r

subject = np.repeat([1,2,3], 4)
treatment = np.tile([1,2,3,4], 3)
R.assign('subject', subject)
R.assign('treatment', treatment)
R('subject <- as.factor(subject)')
R('treatment <- as.factor(treatment)')
R('design <- model.matrix(~subject+treatment)')
R('print(design)')

收益率

代码语言:javascript
复制
   (Intercept) subject2 subject3 treatment2 treatment3 treatment4
1            1        0        0          0          0          0
2            1        0        0          1          0          0
3            1        0        0          0          1          0
4            1        0        0          0          0          1
5            1        1        0          0          0          0
6            1        1        0          1          0          0
7            1        1        0          0          1          0
8            1        1        0          0          0          1
9            1        0        1          0          0          0
10           1        0        1          1          0          0
11           1        0        1          0          1          0
12           1        0        1          0          0          1
attr(,"assign")
[1] 0 1 1 2 2 2
attr(,"contrasts")
attr(,"contrasts")$subject
[1] "contr.treatment"

attr(,"contrasts")$treatment
[1] "contr.treatment"

R(...)返回可以在Python端操作的对象。例如,

代码语言:javascript
复制
design = R('model.matrix(~subject+treatment)')

rpy2.robjects.vectors.Matrix分配给design

代码语言:javascript
复制
arr = np.array(design)

使arr成为NumPy数组

代码语言:javascript
复制
[[ 1.  0.  0.  0.  0.  0.]
 [ 1.  0.  0.  1.  0.  0.]
 [ 1.  0.  0.  0.  1.  0.]
 [ 1.  0.  0.  0.  0.  1.]
 [ 1.  1.  0.  0.  0.  0.]
 [ 1.  1.  0.  1.  0.  0.]
 [ 1.  1.  0.  0.  1.  0.]
 [ 1.  1.  0.  0.  0.  1.]
 [ 1.  0.  1.  0.  0.  0.]
 [ 1.  0.  1.  1.  0.  0.]
 [ 1.  0.  1.  0.  1.  0.]
 [ 1.  0.  1.  0.  0.  1.]]

可以用

代码语言:javascript
复制
np.array(design.colnames)
# array(['(Intercept)', 'subject2', 'subject3', 'treatment2', 'treatment3',
#        'treatment4'], 
#       dtype='|S11')
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28290245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档