Python 如何使用rpy2使用for循环测试显著性?
我正在尝试使用r(借助rpy2包)对pandas数据帧中的一些变量运行t-test。我使用jupyter笔记本中的神奇函数让python与R交互。除了循环之外,交互是成功的 以下是数据帧: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
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)