Hi,all
I have a problem running R.matlab package
(under 2.10.1 version). I can set up the matlab server under local
machine(run the MatlabServer.m), "
And I can use setVariable and evaluate matlab functions in R. But when I ask
Matlab to send the value back to R using getVariable function it
always returns an error:
"
??? Error: A MATLAB string constant is not terminated properly.
Error in ==> MatlabServer at 197
eval(expr);
"
it seems matlab have put the data into a temporary file, so my remote
option is actually FALSE? (how to set it to be true?), or otherwise
what could be the possible problem since I can send data to matlab
from R but not vice versa.
> sessionInfo()
R version 2.10.1 (2009-12-14)
i386-pc-mingw32
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] R.utils_1.5.0 R.matlab_1.3.1 R.oo_1.7.3 R.methodsS3_1.2.0
> traceback()
5: file(con, open = "rb")
4: readMat.default(filename)
3: readMat(filename)
2: getVariable.Matlab(matlab, "B")
1: getVariable(matlab, "B")
Thanks,
Michael
David,
Thanks for your reply, I compile it under the old version of
R, I'll update R and run it again.
Michael
On Fri, Aug 27, 2010 at 7:59 AM, michael <tufemichael at gmail.com>
wrote:> Hi,all
> ? ? ? ? ? ? ? ? ? ? ?I have a problem running R.matlab package
> (under 2.10.1 version). I can set up the matlab server under local
> machine(run the MatlabServer.m), "
>
>
> And I can use setVariable and evaluate matlab functions in R. But when I
ask
> Matlab to send the value back to R using getVariable function it
> always returns an error:
> "
> ??? Error: A MATLAB string constant is not terminated properly.
>
> Error in ==> MatlabServer at 197
> ? ? eval(expr);
> "
>
> it seems matlab have put the data into a temporary file, so my remote
> option is actually FALSE? (how to set it to be true?), or otherwise
> what could be the possible problem since I can send data to matlab
> from R but not vice versa.
>
>
>
>> sessionInfo()
> R version 2.10.1 (2009-12-14)
> i386-pc-mingw32
>
> locale:
> [1] LC_COLLATE=English_United States.1252
> [2] LC_CTYPE=English_United States.1252
> [3] LC_MONETARY=English_United States.1252
> [4] LC_NUMERIC=C
> [5] LC_TIME=English_United States.1252
>
> attached base packages:
> [1] stats ? ? graphics ?grDevices utils ? ? datasets ?methods ? base
>
> other attached packages:
> [1] R.utils_1.5.0 ? ? R.matlab_1.3.1 ? ?R.oo_1.7.3 ? ? ? ?R.methodsS3_1.2.0
>
>
>> traceback()
> 5: file(con, open = "rb")
> 4: readMat.default(filename)
> 3: readMat(filename)
> 2: getVariable.Matlab(matlab, "B")
> 1: getVariable(matlab, "B")
>
> Thanks,
>
> Michael
>
Henrik,
Thanks for your reply. I am using Matlab version
7.9.0(R2009b). This is my first try using R.matlab. I started matlab
in the same machine, and I run the MatlabServer.m in matlab, here is
my code in R:
library(R.matlab)
library(MASS)
matlab <- Matlab()
open(matlab)
setVerbose(matlab, -2)
setOption(matlab, "readResult/interval", 10);
setOption(matlab, "readResult/maxTries", 30*(60/10));
y<-matrix(rnorm(100),100,1)
x<-matrix(rnorm(200),100,1)
z<-matrix(rnorm(200),100,2)
setVariable(matlab, y=y,remote=FALSE)
setVariable(matlab, x=x,remote=FALSE)
setVariable(matlab, z=z,remote=FALSE)
evaluate(matlab,"B=TSLS(y,x,z);")
evaluate(matlab,"B")
B <- getVariable(matlab, "B",remote=FALSE)
where TSLS is a matlab function that is already written and sitting in
the working folder. The code works fine until the last command,
getVariable function, where it returns an error:
??? Error: A MATLAB string constant is not terminated properly.
Error in ==> MatlabServer at 197
eval(expr);
In R:
Retrieving variables from the Matlab server: 'B'
Sending expression on the Matlab server to be evaluated...:
'variables = {'B'};'
Received an 'OK' reply (0) from the Matlab server.
Evaluated expression on the Matlab server with return code 0.
Asks the Matlab server to send variables via the local file system...
Error in file(con, open = "rb") : invalid 'description'
argument
Thanks,
Michael
Henrik,
Here is the matlab response:
>> MatlabServer
Matlab v7.x or higher detected.
Saving with option -V6.
Added InputStreamByteWrapper to dynamic Java CLASSPATH.
----------------------
Matlab server started!
----------------------
Trying to open server socket (port 9999)...done.
so I connect to matlab using
open(matlab)
in R:
Connected to client.
then I send the variable to matlab:
setVariable(matlab, y=y,remote=FALSE)
Received cmd: 3
Will read MAT file:
"C:\Users\FAN'S~1\AppData\Local\Temp\Rtmpl04K6T\file2fff3c61.mat"
setVariable(matlab, x=x,remote=FALSE)
Received cmd: 3
Will read MAT file:
"C:\Users\FAN'S~1\AppData\Local\Temp\Rtmpl04K6T\file288f6c69.mat"
setVariable(matlab, z=z,remote=FALSE)
Received cmd: 3
Will read MAT file:
"C:\Users\FAN'S~1\AppData\Local\Temp\Rtmpl04K6T\file22cd3a61.mat"
evaluate(matlab,"B=TSLS(y,x,z);")
Received cmd: 1
"eval" string: "B=TSLS(y,x,z);"
Sent byte: 0
evaluate(matlab,"B")
Received cmd: 1
"eval" string: "B"
B -0.7548
Sent byte: 0
B <- getVariable(matlab, "B",remote=FALSE)
Received cmd: 2
save
C:\Users\FAN'SH~1\AppData\Local\Temp\tp4f05d961_4460_47ba_a064_cfd418a19d60.mat
-V6 B
??? Error: A MATLAB string constant is not terminated properly.
Error in ==> MatlabServer at 197
eval(expr);
Thanks,
Michael
[[alternative HTML version deleted]]
Henrik,
I updated the MatlabServer.m from the link you sent to me, but it
still doen't work. I have the same problems as before, when remote=FALSE,
getVariable doesn't work; when remote=TRUE, setVariable says:
Received cmd: 5
Will read MAT file structure of length: 984 bytes.
??? Undefined variable "java" or class
"java.io.InputStreamByteWrapper".
Error in ==> MatlabServer at 262
reader = java.io.InputStreamByteWrapper(4096);
Thanks,
Michael
[[alternative HTML version deleted]]
Henrik,
When I set remote=FALSE, I got this error:
??? Error: A MATLAB string constant is not terminated properly.
Error in ==> MatlabServer at 197
eval(expr);
In R:
Retrieving variables from the Matlab server: 'B'
Sending expression on the Matlab server to be evaluated...: 'variables
{'B'};'
Received an 'OK' reply (0) from the Matlab server.
Evaluated expression on the Matlab server with return code 0.
Asks the Matlab server to send variables via the local file system...
Error in file(con, open = "rb") : invalid 'description'
argument
Thanks,
Michael
[[alternative HTML version deleted]]
Henrik,
The line before that is:
Received cmd: 2
save
C:\Users\FAN'S~1\AppData\Local\Temp\tpe2b4012b_f9ed_402d_af0f_f21ebd8116a6.mat
-V6 B
Thanks,
Michael
[[alternative HTML version deleted]]
Henrik, Yes I replaced the MatlabServer.m and restarted Matlab and R, it seems the problem is still there. I see save(temp,-v6,B) there too. I use MatlabServer.m mannually in Matlab, actually I couldn't use it in R, Matlab will pop up a command window and never respond. Thanks, Michael [[alternative HTML version deleted]]
Henrik,
OK, finally I got the problem: I have an apostrophe in my
windowns 7 user name. That mess up the file name. So I logged in using a
guest account and it works:
Received cmd: 1
"eval" string: "B"
B -0.1347
Sent byte: 0
Received cmd: 1
"eval" string: "variables = {'B'};"
Sent byte: 0
Received cmd: 2
save tempname-V6 B
answer=0
Thanks a lot for your patience and help.
One final question, the variable B I got from Matlab is not just a numeric
value, it is:
> B
$B
[,1]
[1,] -0.1346952
attr(,"header")
attr(,"header")$description
[1] "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Sat Aug 28 18:40:26
2010 "
attr(,"header")$version
[1] "5"
attr(,"header")$endian
[1] "little"
How can I get only the numeric value, that ' -0.1346952' part?
Thanks again,
Michael
On Fri, Aug 27, 2010 at 7:59 AM, michael <tufemichael@gmail.com> wrote:
> Hi,all
> I have a problem running R.matlab package
> (under 2.10.1 version). I can set up the matlab server under local
> machine(run the MatlabServer.m), "
>
>
> And I can use setVariable and evaluate matlab functions in R. But when I
> ask
> Matlab to send the value back to R using getVariable function it
> always returns an error:
> "
> ??? Error: A MATLAB string constant is not terminated properly.
>
> Error in ==> MatlabServer at 197
> eval(expr);
> "
>
> it seems matlab have put the data into a temporary file, so my remote
> option is actually FALSE? (how to set it to be true?), or otherwise
> what could be the possible problem since I can send data to matlab
> from R but not vice versa.
>
>
>
> > sessionInfo()
> R version 2.10.1 (2009-12-14)
> i386-pc-mingw32
>
> locale:
> [1] LC_COLLATE=English_United States.1252
> [2] LC_CTYPE=English_United States.1252
> [3] LC_MONETARY=English_United States.1252
> [4] LC_NUMERIC=C
> [5] LC_TIME=English_United States.1252
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>
> other attached packages:
> [1] R.utils_1.5.0 R.matlab_1.3.1 R.oo_1.7.3 R.methodsS3_1.2.0
>
>
> > traceback()
> 5: file(con, open = "rb")
> 4: readMat.default(filename)
> 3: readMat(filename)
> 2: getVariable.Matlab(matlab, "B")
> 1: getVariable(matlab, "B")
>
> Thanks,
>
> Michael
>
[[alternative HTML version deleted]]