假设您有一个变量列表a到j
for(x in 1:10) {
assign(letters[x],x)
}
您如何评论最近创建的对象?我尝试过类似的东西:
for(x in 1:10) {
comment(get(letters[x])) <- paste(x)
}
但这似乎失败了。随着:
Error in comment(get(letters[x])) <- paste(x) :
could not find function "get<-"
我在这里缺少什么?
答案 0 :(得分:4)
如果您想要循环播放内容,请将它们存储在列表中。它让生活更轻松。但是如果你真的想要这样做,你可能只需要一个eval循环(解析(thingum:
> for(i in 1:10){
+ eval(parse(text=paste("comment(",letters[i],")<-'",as.character(i*2),"'",sep="")))
+ }
答案 1 :(得分:2)
您无法为返回的变量指定值,请参阅:
> x <- 'cars'
> get(x) <- 1
Error in get(x) <- 1 : could not find function "get<-"
但是get
可以读取/加载返回变量的注释,请参阅:
> comment(cars) <- "test"
> comment(get(x))
[1] "test"
您可以将变量连接到例如列表并注释列表的元素,如:
> l <- list(a=1,b=2,c=3)
> for (x in 1:3) {
+ comment(l[[letters[x]]]) <- paste(x)
+ }
> str(l)
List of 3
$ a: atomic [1:1] 1
..- attr(*, "comment")= chr "1"
$ b: atomic [1:1] 2
..- attr(*, "comment")= chr "2"
$ c: atomic [1:1] 3
..- attr(*, "comment")= chr "3"
如果你坚持使用不同的变量,只需附上给定的列表,如:
> attach(l)
The following object(s) are masked _by_ '.GlobalEnv':
a, b, c
> a
[1] 1
> str(a)
atomic [1:1] 1
- attr(*, "comment")= chr "1"
答案 2 :(得分:2)
试试这个:
# sample data
letters <- setNames(as.list(1:10), LETTERS[1:10])
for(i in 1:10) {
temp <- letters[[i]]
comment(temp) <- paste(i)
letters[[i]] <- temp
}
答案 3 :(得分:2)
另一个变体是get()
对象并将其分配给本地对象。将注释附加到该本地对象,然后将其分配回全局工作区。
> for(x in 1:10) {
+ assign(letters[x],x)
+ }
>
> a
[1] 1
> comment(a)
NULL
>
> for(x in 1:10) {
+ obj <- get(letters[x])
+ comment(obj) <- paste(x)
+ assign(letters[x], obj)
+ }
> ## cleanup
> rm(obj)
> a
[1] 1
> comment(a)
[1] "1"
您的代码无效的原因是没有get()
的替换函数版本,因此出现关于get<-()
的错误消息。
将对象存储在列表中会像其他人提到的那样容易管理,因此您没有很多对象堵塞全局工作区,但上面显示了如何修改示例代码以实现您想要的结束。 / p>