一次评论多个对象

时间:2011-03-19 22:56:01

标签: r

假设您有一个变量列表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<-"

我在这里缺少什么?

4 个答案:

答案 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>