On Dec 11, 2011, at 9:07 PM, Jinsong Zhao wrote:
On 2011-12-12 0:00, David Winsemius wrote:
On Dec 11, 2011, at 10:27 AM, Jinsong Zhao wrote:
Hi there,
I hope to modify values in a vector or matrix in the following code:
for (i in 1:9) {
assign(paste("a.", i, sep = ""), 1:i)
get(paste("a.", i, sep = ""))[i] <- i+50
}
Just one matrix? Then you seem to have inappropriately borrowed using
"." as an indexing operation. In R that is just another character
when
used as an object name. "a.1" is notgoing to evaulate to a[1]. Look
at
what you would have had after
> for (i in 1:9) {
+ assign(paste("a.", i, sep = ""), 1:i)
+ }
> ls()
[1] "a" "a.1" "a.2"
[4] "a.3" "a.4" "a.5"
[7] "a.6" "a.7" "a.8"
[10] "a.9"
> a.1
[1] 1
> a.2
[1] 1 2
Each of those assign() operations created a single vector of length
i. I
doubt that was what you intended,
yes, it was what I intended.
Then you are free to continue banging your head against a wall.
Better would be to describe your objects and your intentions, rather
than expecting us to understand your goals by just looking at code
that
doesn't achieve thos goals. (There is no `get<-` function which was
the
source of the error.)
The question is why
get(paste("a.", i, sep = ""))[i] <- i+50
give the following error message:
What part of THERE IS NO "get<-" function (much less a `get[<-`
function) don't you understand?
Error in get(paste("a.", i, sep = ""))[i] <- i + 50 :
target of assignment expands to non-language object
The a.1 to a.9 was created in the previous step.
if only
get(paste("a.", i, sep = ""))[i]
can give correct output.
Right. They are there and can even be indexed:
> get(paste("a", 9, sep="."))[9]
[1] 9
You could assign the value of get(paste("a", 9, sep=".")) to an
intermediate object, which you could then reference using "[" and then
use `assign` to push that object's value back to an object named "a.
1", , "a.2", etc. Very clumsy and not an idiom that people want to
promote.
> x <- get(paste("a", 9, sep="."))
> x[9] <- x[9]+50
> assign(paste("a", 9, sep="."), x)
> a.9
[1] 1 2 3 4 5 6 7 8 59
Why I cannot assign values to it?
Using get, you mean? Because that is not the way R is designed. get()
returns a value. `assign` is used... wait for it ... assignment.
> get(paste("a", 1, sep="."))
[1] 1
Not a.1 but rather a.1's value. You cannot assign something else to
the number 1. You are free to complain about the fact that R is is not
languageX as much as you like, but it won't create new capabilities
for functions. You've been given advice about how to get to the goal
you desire by both Dunlap and Burns. The counter-question is why you
have such trouble accepting advice.
Regards,
Jinsong
David Winsemius, MD
West Hartford, CT
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.