On 2011-12-12 10:58, David Winsemius wrote:
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?
Sorry, I didn't understand it in the previous post. Now, it seems clear...
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
Yes, the intermediate object could be used to archive my goal:
for (i in 1:9) {
assign(paste("a", i, sep = "."), 1:i)
x <- get(paste("a", i, sep = "."))
x[[i]] <- x[[i]] + 50
assign(paste("a", i, sep = "."), x)
}
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.
I don't have trouble accepting advice. I am just curious about the
error. Thank you very much for your patience.
Regards,
Jinsong
David Winsemius, MD
West Hartford, CT
Regards,
Jinsong
______________________________________________
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.