我想在R脚本文件中读入Python(使用Tkinter GUI包)并更改一些变量(或者只是打印和播放它们),然后将这些变量重新保存回R脚本文件。我正在看看Rpy2模块,但我没有看到任何可以帮助我实现这一目标的东西。我想要更改的变量是字符串和数字变量(在R中)。
例如:
R脚本包含:
eventtime<-"18:30:00"
eventdate<-"2014-02-28"
Python文件:
import Tkinter as tk
from rpy2.robjects import r
class GUI(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master, width=300, height=200)
self.master = master
self.master.title('GUI')
self.pack_propagate(0)
self.pack()
self.run_button = tk.Button(self, text='Run', command=self.evaluate)
self.run_button.pack(fill=tk.X, side=tk.BOTTOM)
self.entrybox_frame = tk.Frame(self)
self.entrybox_frame.pack(anchor=tk.S, pady=5)
self.eventtime_var = tk.StringVar()
self.eventtime = tk.Entry(self.entrybox_frame, textvariable=self.eventtime_var)
self.eventdate_var = tk.StringVar()
self.eventdate = tk.Entry(self.entrybox_frame, textvariable=self.eventdate_var)
self.eventtime.grid(row=0, column=1)
self.eventdate.grid(row=1, column=1)
def evaluate(self):
# Clicking the Run button will save the variables to the R script
r.source('file.r')
self.get_event_info()
def run(self):
self.mainloop()
def get_event_info(self):
# Get the user input and write them to the R variables
# So first must read the R script into python, then rewrite over those variables
# Then save the R script
print self.eventtime_var.get()
print self.eventdate_var.get()
gui = GUI(tk.Tk())
gui.run()
有什么想法吗?
答案 0 :(得分:2)
最好不要将变量硬编码到脚本中,而是将它们作为Rscript中的可能参数传递,或者在源代码(需要它们)之前将它们设置在R环境中。
使用位置错误解释R脚本
关于 passing arguments (as your variables) 对于脚本,您可以在SO上找到一些已经回答的问题。 上面的链接只是一个启动器。
R-intro B.4使用R编写脚本是官方来源。
Rpy2更改R环境中的对象
您可以在获取rscript之前在R环境中设置或更改(by Rpy2 means)变量,这将使用已设置的变量,因此脚本必须准备好不设置它们而只是使用它们。
答案 1 :(得分:0)
rpy2
提供了一种更好的方法来处理R脚本,方法是将其封装到Python端的命名空间中,以及R端的环境中。