【发布时间】:2011-10-25 11:01:30
【问题描述】:
我对 R 和 rpy2 都是新手。我正在尝试移植以下示例
library(MASS) # for eqscplot
data(topo, package="MASS")
topo.kr <- surf.ls(2, topo)
trsurf <- trmat(topo.kr, 0, 6.5, 0, 6.5, 50)
到 rpy2。
到现在为止
import rpy2.robjects as robjects
robjects.r('library(spatial)')
f1 = robjects.r['surf.ls']
x = robjects.IntVector([1,2,3])
y = robjects.IntVector([1,2,3])
z = robjects.IntVector([1,30,3])
res = f1(2, x,y,z)
我假设结果应该是res。但是,当我使用 print(res.r_repr()) 打印 res 时,我得到一个无法评估的表达式。
非常感谢您对此的任何帮助。
【问题讨论】:
-
我不清楚什么是“无法评估”。此外,您的 rpy2 代码与您的 R 代码不对应(对 surf.ls() 的调用没有相同的参数)。
-
另外,你到底为什么要同时加载 rpy 和 rpy2?
from rpy2 import robjects应该足够了,然后使用robjects.r和robjects.IntVector -
“无法评估”意味着当我发出“print res1.r_repr()”时,我没有返回值数组。相反, res1 包含一个 r 表达式。我的猜测是,为了获得实际值,我需要发出一个命令来评估表达式。
-
到目前为止,我不确定是否担心实际参数,因为该函数执行某些操作并返回结果。 @Brandon:感谢您指出我已修复它。
-
@Sandeep:调用 print() 的副作用是将文本打印到控制台;如果它返回一组值,我会感到不安。调用 f1() 的结果是 res1,而你的意思对我来说仍然是个谜(除了调用 print() 或 'res' 而不是 'res1')。