При применении индивидуально к каждому элементу вектора моя функция дает другой результат, чем использование sapply. Это сводит меня с ума!Sapply отличается от индивидуального применения функции
Item Я использую: это (упрощенный) список аргументов другой функции была вызвана:
f <- as.list(match.call()[-1])
> f
$ampm
c(1, 4)
Чтобы повторить это можно выполнить следующие действия:
foo <- function(ampm) {as.list(match.call()[-1])}
f <- foo(ampm = c(1,4))
Вот моя функция , Он просто удаляет 'c (...)' из строки.
stripConcat <- function(string) {
sub(')','',sub('c(','',string,fixed=TRUE),fixed=TRUE)
}
При использовании только одного он работает так, что это то, что я хочу:
> stripConcat(f)
[1] "1, 4"
Но при использовании sapply, это дает что-то совершенно другое, что я не хочу:
> sapply(f, stripConcat)
ampm
[1,] "c"
[2,] "1"
[3,] "4"
Lapply не работает либо:
> lapply(f, stripConcat)
$ampm
[1] "c" "1" "4"
И ни одна из других не применяет функции. Это сводит меня с ума - я думал, что приятельские и косвенные должны быть идентичны повторяющимся приложениям к элементам списка или вектора!
'> Структура dput (f) (список (ampm = c (1, 4)), .Names =" ampm ")' – esa606
Проблема здесь (что я полностью понять) - это различие между «as.character (f)» и «as.character» (f [[1]]). Попробуйте 'sapply (as.character (f), stripConcat)'. – joran
Это почти добирается! Он дает правильный ответ, но удаляет имя элемента: '> sapply (as.character (f), stripConcat) c (1, 4)« 1, 4 », тогда как ранее элемент« 1,4 »был назван« ampm ». – esa606