[R] read.table and as.vector (Was error message: "Error in model.frame")
Shravan Vasishth
vasishth at ling.ohio-state.edu
Fri Dec 21 05:04:42 CET 2001
Hi all,
I figured out some things about an earlier question I posted today; this
is a new question:
I have a for-loop in which I have the following lines
for (i in list.files(pattern = "*.dmp")) {
currentfile <- read.table(i)
vecrawrts <- as.vector(currentfile$V3)
...
}
Now, vecrawrts is numeric, but if I run the script on all the files with
extension .dmp, I get the error message
> for (i in list.files(pattern = "*.dmp")) {
currentfile <- read.table(i)
vecrawrts <- as.vector(currentfile$V3)
residuals <- residuals(lm(v .... [TRUNCATED]
Error in model.frame(formula, rownames, variables, varnames, extras,
extranames,
invalid variable type
But if I do something like
for (i in list.files(pattern = "*.dmp")) {
currentfile <- read.table(i)
n <- currentfile$V3
numn<-as.numeric(n)
residuals <- residuals(lm(numn ~ vecwordlen))
...
}
everything works fine.
Why should this happen?
Here is the full script containing the above loop:
#-----------------------------------------------------
foobar <- commandArgs()[3] # read in third command line argument
# from shell script
# (contains the wordlen file name)
# read in word length as table;
wordlen <- read.table(foobar)
# convert it to a vector:
vecwordlen <- as.vector(t(wordlen))
# for each file with extension .dmp
for (i in list.files(pattern="*.dmp")){
# read in the file
currentfile <- read.table(i)
# convert 3rd column to a vector:
n <- currentfile$V3
numn<-as.numeric(n)
# compute residuals
residuals <- residuals(lm(numn ~ vecwordlen))
# convert currentfile to matrix format
matcurrentfile <- as.matrix(currentfile)
# convert residuals to matrix format:
matres <- as.matrix(residuals)
# combine the original file with the residuals
bound <- cbind(matcurrentfile,matres)
# append to the output file:
write(t(bound),file="rawresidualsoutput",ncolumns=4,append=TRUE)
# clean up and start loop again
rm(residuals,matres,currentfile,matcurrentfile,bound)
}
# after all files are done, remove the other objects
rm(wordlen, vecwordlen)
#---------------------------------------------------
Thanks,
--
Shravan Vasishth
Dept. of Linguistics, OSU
222 Oxley Hall, 1712 Neil Ave.
Columbus, OH 43210-1298
USA
URL: http://ling.ohio-state.edu/~vasishth
---------- Forwarded message ----------
Date: Thu, 20 Dec 2001 10:16:41 -0500 (EST)
From: Shravan Vasishth <vasishth at julius.ling.ohio-state.edu>
To: r-help at lists.R-project.org
Subject: error message: "Error in model.frame"
Hi all,
All the files related to the question below are in
http://ling.ohio-state.edu/~vasishth/TempRdir/
I've been using a script (called newresiduals.R, the code is in the above
directory; I wanted to avoid cluttering up this message) that is run in
the following manner at the command prompt:
R --vanilla "wordlen-2-01-g1" < newresiduals.R
What it does is: it goes through a bunch of files with extension .dmp, and
(a) calculates residuals by doing residuals(lm(...)), using the vector
version of wordlen-2-01-g1 as the independent variable, and the vector
version of the third column of each .dmp file as the dependent variable,
(b) adds a new column to the original .dmp file, containing the residuals.
The above command is called from a shell script.
This code has worked fine all these days on hundreds of files, but with
the particular set I'm working with now, when I run the above command,
I get the error message:
> for (i in list.files(pattern = "*.dmp")) {
currentfile <- read.table(i)
vecrawrts <- as.vector(currentfile$V3)
residuals <- residuals(lm(v .... [TRUNCATED]
Error in model.frame(formula, rownames, variables, varnames, extras,
extranames,
:
> traceback()
9: model.frame.default(formula = vecrawrts ~ vecwordlen,
drop.unused.levels = TRUE)
8: model.frame(formula = vecrawrts ~ vecwordlen, drop.unused.levels =
TRUE)
7: eval(expr, envir, enclos)
6: eval(mf, parent.frame())
5: lm(vecrawrts ~ vecwordlen)
4: residuals(lm(vecrawrts ~ vecwordlen))
3: eval.with.vis(expr, envir, enclos)
2: eval.with.vis(ei, envir)
1: source("newresiduals.R", echo = TRUE)
> ?model.frame.default
Can anyone help me figure out what's going wrong? The really odd thing is,
the output of the script appears to be perfectly OK, even though it halts
with this error message.
Here's my system configuration, in case this is relevant:
> version
_
platform powerpc-unknown-linux-gnu
arch powerpc
os linux-gnu
system powerpc, linux-gnu
status
major 1
minor 3.1
year 2001
month 08
day 31
language R
Thanks very much in advance,
--
Shravan Vasishth
Dept. of Linguistics, OSU
222 Oxley Hall, 1712 Neil Ave.
Columbus, OH 43210-1298
USA
URL: http://ling.ohio-state.edu/~vasishth
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
More information about the R-help
mailing list