R-For L oop реализация пользовательской функции - PullRequest
0 голосов
/ 27 апреля 2020

Я довольно новичок в R и самоучка. У меня есть опыт работы с другими языками, и я думаю, что это то, что сбивает меня с толку прямо сейчас. Я сделал статистический анализ в R и написал функцию zoneFinder, которая принимает входные данные (distNum) и выходные данные (zoneNum). zoneFinder работает нормально, когда я вызываю его в RStudio и вручную вводю как действительные, так и недействительные выходные данные, поэтому я не думаю, что это моя проблема.

- Является ли фрейм данных правильной структурой для хранения вывода? если нет, то что?

- я пытался использовать nrows (ds) для диапазона, через который итерирует for для l oop, но это не сработало (хотя я полагаю, что ни один из них не вводит данные вручную range)

- это правильная структура для l oop в R? У меня проблемы с доступом к элементу [row] [distNum], и я не знаю, как получить к нему прямой доступ.

zoneNums <- data.frame()
#creates a data structure to store function output

#for loop to iterate through row, send the distNum value for that row, and return zoneID 
for (row in 1 : nrow(ds) ){

#trying to obtain the value stored at ds[current rownumber, variable distNum]
 distSubmit <- as.numeric(ds[row, "distNum"])

#storing the result from the function as zoneID
 zoneID <- zoneFinder(distSubmit)

#adding the new value of zoneID into the premade data structure zoneNums
 zoneNums<- c(zoneID)
 #zoneNums[row,ds$zoneNum] <- zoneID
} 

Я перепробовал все ресурсы Google, которые могу, и людей из моего Жизнь, которая знает немного о R, безрезультатна. Помощь будет очень очень приветствоваться! Я также могу ответить на любые последующие вопросы. Я сознательно не включаю свой вывод прямо сейчас, потому что он очень длинный и l oop перебирает весь набор данных для каждой итерации. Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2020

Как правило, лучше использовать семейство apply, а не циклические структуры. Примерно так с использованием sapply:

distSubmit <- as.numeric(ds$distNum) #is the input vector for sapply

zoneNums <- sapply(distSubmit, zoneFinder)

вернет вектор (zoneNums) возвращаемых значений из zoneFinder для каждого элемента вектора distSubmit.

Примечание при возврате не-атоми c типов используйте вместо этого lapply, который возвращает список выходных данных.

...