R — Как вы заполняете вектор внутри функции?

#r #function #loops #vector

#r #функция #петли #вектор

Вопрос:

У меня есть сложная функция. Функция работает. Внутри есть вызываемый вектор csvcols , который считывает csv-файл и создает список столбцов в моем csv-файле, которые имеют качество, которое я ищу.

После завершения моей функции csvcols , NULL несмотря на то, что, когда я включаю print(csvcols) в функцию, она возвращает столбцы, например (1, 3, 5, 6, 7).

Как я могу получить список всех столбцов после того, как я перебрал свою переменную, например for(xx in loop){SumofGeneration} ?

 SumofGeneration <- function(xx) {
csvcols = c()
    for(i in 1:length(xx)) {
            func2(xx[i])
        if( func2(xx[i]) == T){
            csvcols <- c(csvcols, which(colnames(filename) %in% xx[i]))
                             }
}
xxgeneration <- rowSums(filename[,csvcols])
}

#Generates list of relevant cols (csvcols vector) in file (filename)
#Sums values in those cols and returns xxgeneration


loop <- c( 14 strings here)
For (xx in loop){
SumofGeneration(xx)}
 

Я попытался сохранить свои csv-файлы как:

 csvcols2 <- c(csvcols2, csvcols)
 

Мой цикл выполняется SumofGeneration с 14 строками в моем списке (цикл), и внутри функции генерируются значения в csvcols , а затем, когда функция завершается, я теряю эти значения и. csvcols = NULL

csvcols2 всегда возвращает значение NULL. Как я могу перестать терять свои ценности? Я хочу, чтобы мой вывод был вектором со всеми 14 csvcols значениями в одном векторе — csvcols2 .

Комментарии:

1. Читайте о области видимости переменных в R. Переменные внутри функции являются ЛОКАЛЬНЫМИ для этой функции, если вы не укажете R сделать их ГЛОБАЛЬНЫМИ. Поэтому, когда функция запускается, она создает csvcols , заполняет его, а затем быстро удаляет его, как только функция завершается. Решите эту проблему, «вернув» csvcols переменную в конце функции с return(csvcols) помощью или присвоив csvcols ее ГЛОБАЛЬНОЙ среде с помощью assign() функции.

2. После выполнения вашего предложенного чтения оператор <<-, похоже, выполняет желаемую функцию. Спасибо за помощь!