Комментирование нескольких объектов одновременно - PullRequest
3 голосов
/ 20 марта 2011

Предположим, у вас есть список переменных от 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 ]

4 голосов
/ 20 марта 2011

Если вы когда-нибудь захотите перебрать что-то, сохраните их в списке. Это облегчает жизнь. Но если вы действительно хотите это сделать, вам может понадобиться цикл по eval (parse (thingum:

)
> for(i in 1:10){
+  eval(parse(text=paste("comment(",letters[i],")<-'",as.character(i*2),"'",sep="")))
+ }
2 голосов
/ 20 марта 2011

Другой вариант - 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<-().

. Хранить ваши объекты в списке, как упоминали другие, было бы проще, так как у вас нет большого количества объектов, забивающих глобальное рабочее пространство, но выше показано, какизмените ваш пример кода, чтобы достичь желаемой цели.

2 голосов
/ 20 марта 2011

Попробуйте это:

# 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
}
2 голосов
/ 20 марта 2011

Вы не можете присвоить значение возвращаемой переменной , см .:

> 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...