Некоторые функции, такие как browser
, имеют смысл только при интерактивном использовании.
Широко распространено мнение, что функцию subset
следует использовать только интерактивно.
Точно так же sapply
не подходит для программного использования, поскольку не упрощает результат для входных данных нулевой длины.
Я пытаюсь составить исчерпывающий список функций, которые только не подходят для программного использования.
План состоит в том, чтобы сделать инструмент для проверки пакетов, чтобы узнать, вызываются ли какие-либо из этих функций и выдавать предупреждение.
Существуют и другие функции, такие как file.choose
и readline
, которые требуют интерактивности, но их можно включать в пакеты, поскольку конечное использование будет интерактивным. Меня это не слишком волнует для этого варианта использования, но не стесняйтесь добавлять их в список.
Какие функции я пропустил?
attach
ни в коем случае нельзя использовать, тем более программно. И, конечно же,View
,edit
и друзья. Я не уверен, что согласен сsapply
. - person Roland   schedule 27.04.2014attach
. Я считаю, чтоsapply
вызывает слишком много неясных ошибок из-за ввода нулевой длины. Например,sapply(x, length)
возвращает целочисленный вектор, если толькоx
не имеет длины0
, и в этом случае вы получите список. Если вы знаете, что размер вывода постоянен, используйтеvapply
, иначе используйтеlapply
. - person Richie Cotton   schedule 27.04.2014browser
в своем коде, что выглядит глупо, если вы зарегистрируете его в репозитории. - person Richie Cotton   schedule 27.04.2014cat
. Часто вместо этого следует использоватьmessage
. - person Roland   schedule 27.04.2014subset
, при использовании в программировании заключается в том, что они используют нестандартную оценку своих аргументов. Это потенциальная проблема только в том случае, если те аргументы, которые оцениваются с использованием нестандартной оценки, являются переданными переменными. Такие функции по-прежнему можно безопасно использовать в функциях, если аргументы, подлежащие нестандартной оценке, передаются в виде константных выражений. Например,subset(data, id == 1)
не будет проблемой в функции. - person G. Grothendieck   schedule 27.04.2014subset
не очень опасно. Одна вещь, которая была бы удивительной для R, — это автоматическая проверка и исправление кода MATLAB. bit.ly/1iqehBz Идея, каких функций следует избегать, — это то, что я могу построить в день? эквивалент. - person Richie Cotton   schedule 27.04.2014attach
required (но стоит отметить, что это вызывается только тогда, когда пользователь находится либо в интерактивном режиме, либо передает параметр, который в любом случае не рекомендуется). - person Konrad Rudolph   schedule 27.04.2014sapply
подходит при использованииsimplify=FALSE
. Чтобы получить тот же результат, что иsapply(letters[1:3], "(", simplify=FALSE)
сlapply
, вы должны быть избыточнымиsetNames(lapply(letters[1:3], "("), letters[1:3])
- person GSee   schedule 27.04.2014