Захват аргументов из R функций, ВКЛЮЧАЯ ПО ​​УМОЛЧАНИЮ [дублировать]

вы можете отключить предупреждающее сообщение, как описано в других ответах, или вы можете понять, что происходит и исправить.

Начиная с MySQL 5.7.5, по умолчанию SQL-режим включает ONLY_FULL_GROUP_BY , что означает, что когда вы группируете строки и затем выбираете что-то из этих групп, вам нужно явно указать, из какой строки должен быть сделан этот выбор.

Mysql должен знать, какую строку в группе вы ищете, что дает вам две опции

  • Вы также можете добавить столбец вы хотите, чтобы оператор группы group by rect.color, rect.value, который может быть тем, что вы хотите в некоторых случаях, в противном случае возвращал бы повторяющиеся результаты с тем же цветом, который вам может не понадобиться
  • , вы также можете использовать агрегированные функции mysql, чтобы указать, какие строку, которую вы ищете внутри групп, таких как AVG() MIN() MAX() Полный список
  • И, наконец, вы можете использовать ANY_VALUE(), если вы уверены, что все результаты внутри группы одинаковы. doc

12
задан gjabel 18 January 2013 в 12:52
поделиться

4 ответа

Надеюсь, это не приведет к драконам.

foo <- function(x=NULL,y=NULL,z=2) {
  mget(names(formals()),sys.frame(sys.nframe()))

}

foo(x=4)

$x
[1] 4

$y
NULL

$z
[1] 2

print(foo(x=4))

$x
[1] 4

$y
NULL

$z
[1] 2
24
ответ дан Roland 24 August 2018 в 01:02
поделиться
 foo <- function(x=NULL,y=NULL,z=2) {
   X <- list(x,y,z); names(X) <- names(formals()); X
 }
 z <- foo(4)
 z
#------
$x
[1] 4

$y
NULL

$z
[1] 4
4
ответ дан 42- 24 August 2018 в 01:02
поделиться

вы можете использовать сочетание двух, match.call и formals

foo <- function(x=NULL,y=NULL,z=2)
{
  ll <- as.list(match.call())[-1]     ## 
  myfor <- formals(foo)               ## formals with default arguments
  for ( v in names(myfor)){
             if (!(v %in% names(ll)))
                ll <- append(ll,myfor[v])  ## if arg is missing I add it
             }
  ll
}

Например:

  foo(y=2)
$y
[1] 2

$x
NULL

$z
[1] 2

> foo(y=2,x=1)
$x
[1] 1

$y
[1] 2

$z
[1] 2
11
ответ дан agstudy 24 August 2018 в 01:02
поделиться

Вот попытка обернуть эту логику в функцию многократного использования, чтобы она появилась вместо match.call:

match.call.defaults <- function(...) {
  call <- evalq(match.call(expand.dots = FALSE), parent.frame(1))
  formals <- evalq(formals(), parent.frame(1))

  for(i in setdiff(names(formals), names(call)))
    call[i] <- list( formals[[i]] )


  match.call(sys.function(sys.parent()), call)
}

Похоже, что она работает:

foo <- function(x=NULL,y=NULL,z=2,...) {
  match.call.defaults()
}


> foo(nugan='hand', x=4)
foo(x = 4, y = NULL, z = 2, ... = pairlist(nugan = "hand"))
4
ответ дан Neal Fultz 24 August 2018 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: