Невозможно обновить вектор с использованием l oop и функции в R - PullRequest
3 голосов
/ 09 июля 2020

Я новичок в R и пытаюсь добавить к вектору a, используя как функцию, так и al oop. Вот мой код:

add_to_a <- function(num){
  print (paste("This is a: ", paste(a,collapse =" ")))
  for (i in 1:3){
    a <- c(a,"hello")
  }
}

a <- c()

for(i in 1:5){
  a<- add_to_a(i)
}

Мой результат:

[1] "This is a:  "
[1] "This is a:  "
[1] "This is a:  "
[1] "This is a:  "
[1] "This is a:  "

Я пытался отладить эту проблему и добавил оператор печати:

add_to_a <- function(num){
  print (paste("This is a: ", paste(a,collapse =" ")))
  for (i in 1:3){
    a <- c(a,"hello")
  }
  print (a)
}

a <- c()
for(i in 1:5){
  a<- add_to_a(i)
}
 

Это это мой результат:

[1] "This is a:  "
[1] "hello" "hello" "hello"
[1] "This is a:  hello hello hello"
[1] "hello" "hello" "hello" "hello" "hello" "hello"
[1] "This is a:  hello hello hello hello hello hello"
[1] "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello"
[1] "This is a:  hello hello hello hello hello hello hello hello hello"
 [1] "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello"
[1] "This is a:  hello hello hello hello hello hello hello hello hello hello hello hello"
 [1] "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello"
  

и обновляется в конце, как и ожидалось:

[1] "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello" "hello"

Не могли бы вы помочь мне понять, почему результаты в двух случаях разные?

1 Ответ

1 голос
/ 09 июля 2020

Причина заключается в локальном или глобальном определении переменной. Функция не нужна. Будьте осторожны, переменная num бесполезна.

Это решение должно работать:

a <- c()
for(i in 1:5){
    print(paste("This is a: ", paste(a,collapse =" ")))
    for (i in 1:3){
        a <- c(a,"hello")
    }
}

Если вы хотите сделать что-то подобное:

add_to_a <- function(a){
    print(paste("This is a: ", paste(a, collapse =" ")))
    for (i in 1:3){
        a <- c(a, "hello")
    }
    return(a)
 }

a <- c()
for(i in 1:5){
    a <- add_to_a(a)
}

Для более полное объяснение локальных или глобальных переменных советую посмотреть этот пост .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...