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