【问题标题】:R & Python: How to use a string to reach into a dataframe/matrix in RR & Python:如何使用字符串进入 R 中的数据框/矩阵
【发布时间】:2016-05-05 04:41:54
【问题描述】:

我目前正在同时使用 Python 和 R(使用 rmagic/rpy2)来帮助选择不同的用户输入变量以进行某种类型的分析。

我已经阅读了一个 csv 文件并在 R 中创建了一个数据框。我还允许用户输入一些变量,这些变量的名称必须与标题中的变量匹配(使用 Python)。

例如,如果我创建一个这样的数据框

%R data1 <- read.csv(filename, header =T)

然后我有一些用户输入变量,这些变量当前是 python 中的字符串,看起来像这样。

var_1 = 'data1$age'
var_2 = 'data1$sex'

然后我怎样才能使用这个字符串作为 R 中的可运行代码来到达数据框的正确列:

%R variable1 <- data1$sex

目前我已经尝试了 assign 功能和其他功能(我知道这可能离目标很远),但我总是这样:

%R -i var_1  assign('variable1', var_1)   
%R print(variable1)

"data1$age"

我知道我可以在 R 中分配值等,但我质疑是否有可能将字符串转换为可运行的代码位,该代码可以到达 data.frame。

【问题讨论】:

标签: python r rpy2


【解决方案1】:

考虑让 Python 通过将字符串变量作为参数传递的命令行将 R 脚本作为子进程调用。在 R 中,使用双括号列引用来使用字符串:

Python 脚本(使用子进程模块)

import subprocess

var_1 = 'age' 
var_2 = 'sex'
Rfilename = '/path/to/SomeScript.R'

# BELOW ASSUMES RScript IS A SYSTEM PATH VARIABLE
p = subprocess.Popen(['RScript', Rfilename, var1, var2])

R脚本

args <-commandArgs(trailingOnly=T)
var_1 <- as.character(args[1])
var_2 <- as.character(args[2])

data1 <- read.csv(filename, header =T)
variable1 <- data1[[var_1]]
variable2 <- data1[[var_2]]

【讨论】:

    【解决方案2】:

    是的,有可能:

    var_1 <- "head(iris$Species)"
    eval(parse(text=var_1))
    # [1] setosa setosa setosa setosa setosa setosa
    # Levels: setosa versicolor virginica
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多