我有一些意外的行为,从Bash和RStudio中运行相同的脚本。
请考虑以下事项。我有一个包含两个脚本的文件夹"~/rpython"
:
# test1.R
library(rPython)
setwd("~/rpython")
python.load("test1.py")
number <- python.get("number")
string <- python.get("string")
print(sqrt(number))
print(string)
和
# test1.py
import random, nltk
number = random.randint(1, 1000)
string = nltk.word_tokenize('home sweet home')
我可以使用Rscript test1.R
从Bash调用我的R脚本,该脚本按预期返回
>> Loading required package: RJSONIO
>> [1] 13.0384
>> [1] "home" "sweet" "home"
如果我再次调用它将产生不同的随机数
>> Loading required package: RJSONIO
>> [1] 7.211103
>> [1] "home" "sweet" "home"
但是当我从RStudio运行相同的脚本(test1.R
)时,事情变得奇怪了。这里输出
# test1.R
>
> library(rPython)
Loading required package: RJSONIO
>
> setwd("~/rpython")
>
> python.load("test1.py")
Error in python.exec(code, get.exception) : No module named nltk
>
> number <- python.get("number")
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'number' is not defined
Error in python.get("number") : Variable not found
> string <- python.get("string")
Traceback (most recent call last):
File "<string>", line 1, in <module>
NameError: name 'string' is not defined
Error in python.get("string") : Variable not found
>
> print(sqrt(number))
Error in print(sqrt(number)) : object 'number' not found
> print(string)
Error in print(string) : object 'string' not found
出于某种原因,当我从RStudio调用脚本时,Python解释器无法找到模块nltk
(它似乎与其他pip
安装的模块相同)但导入没有问题random
。
答案 0 :(得分:6)
我也有这个问题。问题是我的bash终端似乎调用的是一个不同于Rstudio的python。我还了解到,如果您只是尝试从rPython调用Python.load(),那么您可能最好使用基础R库中的system()。
which python
。对我来说(OS X 10.11.5),它是/usr/local/bin/python
。现在我们知道了完整路径,我们可以明确地调用它并阻止R选择可能安装在机器某个角落的另一个版本。system()
从R而不是python.load()
调用bash命令,并使用脚本的完整路径。使用您的示例脚本名称和我的示例python路径,它将是system('/usr/local/bin/python /path/to/file/test.py1')
希望有所帮助!