在 pycharm 中,我的代码可以按预期工作。有一个函数在调用时返回一个 numpy 数组。
我想将该数组放入 RStudio 的环境中,例如数据帧或任何真正作为起点的东西。
这是我的简单代码
library(RJSONIO)
library(rPython)
locTest <-"/home/cornelis/Downloads/M1302000139_1442697993.722772.raw"
x<-python.call("get_frames",locTest,256,256)
这是输出。 RStudio 控制台中显示的 numpy 数组是正确的,但它告诉我它不是 JSON 可序列化的。我还意识到 rPython 包的 documentation没有将 python.call 分配给任何东西,但我不知道如何将 Python 函数调用的返回值分配给 R 中的变量(文档有点薄,但希望我只是没有在正确的位置查找)
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/json/__init__.py", line 243, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python2.7/json/encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: array([[[ 14., 15., 15., ..., 2., 3., 3.],
[ 14., 15., 15., ..., 3., 3., 3.],
[ 14., 13., 13., ..., 2., 2., 3.],
...,
[ 2., 2., 2., ..., 1., 1., 1.],
[ 2., 2., 3., ..., 1., 1., 1.],
[ 3., 4., 3., ..., 1., 1., 2.]],
[[ 11., 13., 13., ..., 3., 3., 3.],
[ 11., 11., 12., ..., 3., 3., 3.],
[ 11., 11., 10., ..., 2., 3., 4.],
...,
[ 1., 2., 3., ..., 1., 1., 1.],
[ 1., 3., 2., ..., 1., 1., 1.],
[ 2., 2., 2., ..., 1., 1., 1.]],
[[ 12., 13., 14., ..., 4., 3., 3.],
[ 12., 11., 11., ..., 3., 4., 4.],
[ 11., 11., 9., ..., 3., 4., 3.],
...,
[ 1., 2., 2., ..., 1., 1., 1.],
[ 2., 2., 2., ..., 1., 1., 1.],
[ 2., 2., 3., ..., 2., 1., 1.]],
...,
[[ 74., 77., 78., ..., 88., 89., 89.],
[ 77., 78., 76., ..., 89., 89., 88.],
[ 79., 78., 77., ..., 89., 87., 88.],
...,
[ 39., 38., 34., ..., 56., 56., 53.],
[ 38., 39., 35., ..., 55., 56., 55.],
[ 36., 38., 36., ..., 55., 56., 58.]],
[[ 81., 79., 79., ..., 93., 91., 92.],
[ 79., 78., 78., ..., 91., 93., 91.],
[ 78., 78., 78., ..., 89., 90., 88.],
...,
[ 39., 37., 35., ..., 59., 57., 55.],
[ 37., 35., 36., ..., 59., 59., 57.],
[ 38., 38., 37., ..., 56., 60., 61.]],
[[ 79., 79., 79., ..., 89., 90., 91.],
[ 77., 78., 78., ..., 89., 89., 88.],
[ 77., 77., 76., ..., 88., 86., 86.],
...,
[ 40., 36., 33., ..., 59., 58., 59.],
[ 36., 35., 33., ..., 58., 58., 57.],
[ 35., 36., 36., ..., 59., 57., 58.]]], dtype=float32) is not JSON serializable
Error in python.get("_r_call_return") : Variable not found
最佳答案
我最终需要更改 python 代码,以便将 numpy 数组转换为列表。
在与同事闲聊并眯着眼睛看文档几个小时后,发现我还需要在 python.call 之前先使用 python.load
以下作品
> library(RJSONIO)
> library(rPython)
> python.load("/home/cornelis/PycharmProjects/TestProject/TestScript.py")
> firstFrame_raw<-python.call("get_frames","/home/cornelis/Downloads/M1302000139_1442697993.722772.raw",256,256)
> firstFrame_raw
...
[[2]][[46]]
[1] 7 8 7 7 7 5 7 6 6 6 5 5 5 5 5 4 6 5 6 5 4 4 4 4
[25] 3 3 4 4 4 4 4 4 4 3 3 2 2 2 2 2 2 2 1 1 1 1 0 1
[49] 2 1 1 2 2 2 2 1 3 3 3 4 4 3 4 4 6 1
...
关于python - 使用 rPython 包将 numpy 数组导入到 R 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32707208/