Python 如何使用rpy2使用for循环测试显著性?

Python 如何使用rpy2使用for循环测试显著性?,python,r,python-3.x,pandas,rpy2,Python,R,Python 3.x,Pandas,Rpy2,我正在尝试使用r(借助rpy2包)对pandas数据帧中的一些变量运行t-test。我使用jupyter笔记本中的神奇函数让python与R交互。除了循环之外,交互是成功的 以下是数据帧: df.head() Out[60]: ID Category Num Vert_Horizon Description Fem_Valence_Mean \ 0 Animals_001_h Animals 1 h Dead Stork

我正在尝试使用r(借助rpy2包)对pandas数据帧中的一些变量运行t-test。我使用jupyter笔记本中的神奇函数让python与R交互。除了循环之外,交互是成功的

以下是数据帧:

df.head()
Out[60]: 
              ID Category  Num Vert_Horizon Description  Fem_Valence_Mean  \
0  Animals_001_h  Animals    1            h  Dead Stork              2.40   
1  Animals_002_v  Animals    2            v        Lion              6.31   
2  Animals_003_h  Animals    3            h       Snake              5.14   
3  Animals_004_v  Animals    4            v        Wolf              4.55   
4  Animals_005_h  Animals    5            h         Bat              5.29   

   Fem_Valence_SD  Fem_Av/Ap_Mean  Fem_Av/Ap_SD  Arousal_Mean       ...        \
0            1.30            3.03          1.47          6.72       ...         
1            2.19            5.96          2.24          6.69       ...         
2            1.19            5.14          1.75          5.34       ...         
3            1.87            4.82          2.27          6.84       ...         
4            1.56            4.61          1.81          5.50       ...         

   Luminance  Contrast  JPEG_size80   LABL   LABA   LABB  Entropy  \
0     126.05     68.45       263028  51.75  -0.39  16.93     7.86   
1     123.41     32.34       250208  52.39  10.63  30.30     6.71   
2     135.28     59.92       190887  55.45   0.25   4.41     7.83   
3     122.15     75.10       282350  49.84   3.82   1.36     7.69   
4     131.81     59.77       329325  54.26  -0.34  -0.95     7.82   

   Classification  valence_median_split  temp_selection  
0                           Low_Valence             OUT  
1                          High_Valence             NaN  
2                           Low_Valence             OUT  
3                           Low_Valence             OUT  
4                           Low_Valence             OUT  

[5 rows x 35 columns]
以下是我尝试这样做的方式:

%Rpush df

Variables = 'All_Valence_Mean', 'Male_Valence_Mean', 'Fem_Valence_Mean'

for var in Variables:
    %R var + '_Sig' <- t.test(var ~ valence_median_split, data = df, var.equal = TRUE)

如果您对R更熟悉,请将尽可能多的逻辑结果推送到R。例如,这将把结果存储在
results
您可以在随后的笔记本单元中从Python访问

%%R -i df -o results

Variables <- c("All_Valence_Mean", "Male_Valence_Mean",
               "Fem_Valence_Mean")
results <- list()

for (var in Variables) {
    results[[paste0(var, '_Sig')]] <- t.test(
        as.formula(paste(var, '~ valence_median_split')),
        data = df, var.equal = TRUE)
}

什么是
%Rpush df
%R
?是JuPyter magic调用了
rpy2
?如果是的话,很有趣@冻糕是的-这是rpy2的神奇召唤!我更新了问题以澄清。除了这个循环,它们在将df推到R时工作得很好。可能是语法问题,但不确定在哪里。你不能在R中构建那样的公式,请使用
as.formula
从字符串转换:
vaar你知道用python构建然后推到R的方法吗?你尝试过我上面的建议吗?
%%R -i df -o results

Variables <- c("All_Valence_Mean", "Male_Valence_Mean",
               "Fem_Valence_Mean")
results <- list()

for (var in Variables) {
    results[[paste0(var, '_Sig')]] <- t.test(
        as.formula(paste(var, '~ valence_median_split')),
        data = df, var.equal = TRUE)
}
Variables = ('All_Valence_Mean', 'Male_Valence_Mean',
             'Fem_Valence_Mean')
results = dict()
from rpy2.robjects.packages import importr
from rpy2.robjects import Formula
stats = importr('stats')

for var in Variables:
    results[('%s_Sig' % var] = stats.t_test(
        Formula('%s ~ valence_median_split' % var),
        data=df, var_equal=True)