Как я могу написать функцию, которая возвращает нечетные числа только из списка целых чисел, используя язык R? Пока я пробовал это
function3 <- function(x){
x<-as.integer(x)
if (x %% 2 ==1) {
return(x)
}
}
но это не работает для списков или векторов, и я действительно не знаю, как изменить свой код, так как «если» будет жаловаться на условие> «имеет длину> 1», и будет использоваться только первый элемент
function(x) x[ x %% 2 == 1 ]
. Некоторые проблемы с вашим кодом: если x
является вектором, тогда ваш if
будет жаловаться на the condition has length > 1 and only the first element will be used
, и, поскольку вы не вырезаете нечетные элементы, он возвращает входной аргумент. (Единственное изменение состоит в том, что я предполагаю, что вы хотите, чтобы он был целочисленным, хотя для этого вам действительно понадобилось бы x <- as.integer(x)
.) — person Lakhdar Mohamed Amine schedule 09.03.2019
Большое спасибо, это была опечатка, и этим объясняется первое сообщение об ошибке. Теперь, когда мой код работает с одним целым числом; Я хотел бы использовать списки (векторы) и чтобы моя функция возвращала только нечетные элементы списка, но я действительно не знаю, как это сделать. — person Lakhdar Mohamed Amine schedule 09.03.2019
В моем комментарии ответ состоит из первых 28 символов. Единственное, что вам нужно добавить, — это преобразовать в целые числа. — person Lakhdar Mohamed Amine schedule 09.03.2019
По крайней мере, часть этого вопроса является дубликатом stackoverflow.com/q/23316161/3358272 и stackoverflow.com/q/14170778/3358272. Ваш первоначальный вопрос о том, как вернуть нечетные числа, был недостаточен, чтобы знать, что это был дубликат в первый раз. — person Lakhdar Mohamed Amine schedule 09.03.2019
Объяснение:
Индексирование описано в
?Extract
(также в?[
) , вы увидите, что он принимает либо списокinteger
(или целочисленныйnumeric
), либоlogical
. В первом случае числа должны находиться в пределах длины вектора; если последнее, то он должен быть той же длины, что и исходный вектор. Например,так что наши
[
внутренности выглядят какзатем мы индексируем исходный вектор
x
на основе этого возвращаемого значенияОбновить
Ваше упоминание о том, что он не работает с
list
в качестве аргумента, предлагает альтернативу, которая работает медленнее, но работает как с векторами, так и со списками.Сравнение производительности:
(Не обращайте внимания на высокие значения
mean
иmax
изmicrobenchmark
, они часто искажаются сборкой мусора во внутренних компонентах R. Если вы не знаете, что это такое … просто нажмите кнопку[I believe]
или погуглите.)В конечном итоге, если вы всегда имеете дело с векторами, я предлагаю первое
justodd
решение, иначеjustodd2
более безопасно (посколькуjustodd(lst)
не работает).