-1

...引数として取りlapply(..., length)、関数の本体にある関数を書くのに問題があります。

現在、私のコードは次のとおりです(重要な部分は2行目です):

paste1 <- function(..., sep = " ", collapse = NULL) {
    if(isTRUE(unique(as.logical(lapply(X = ..., FUN = length)))))
        if(length(sep)) paste(..., sep = sep, collapse = collapse)
        else paste0(..., collapse = collapse)
    else
        ""
}

問題はそのlapply(X = ..., FUN = length)部分です。引数に複数の要素がある場合、一度にすべての引数...に適用しようとしますが、引数が 1 つしかないlengthためエラーがスローされます。length

lapply(X = as.list(...), FUN = length)の要素の一部とリスト表現の情報が失わ...れるため、次のようなものは使用できません。NULL...

私がする必要があるのは、最初に強制せずlengthに の個々の要素に適用することだけです。...

4

1 に答える 1

3

このバージョンではdots <- list(...)、この入力で失敗しないように見えるものを使用します。

> paste1(A = "foo", B = NULL, C = c("bar","foo"))
[1] ""

あなたの関数が何をしようとしているのか、これが有効な入力であるかどうかは見ていませんが、lapply(X = dots, FUN = length)あなたが望むことを行いdots <- list(...)NULL.

paste1 <- function(..., sep = " ", collapse = NULL) {
    dots <- list(...)
    if(isTRUE(unique(as.logical(lapply(X = dots, FUN = length)))))
        if(length(sep)) paste(dots, sep = sep, collapse = collapse)
        else paste0(dots, collapse = collapse)
    else
        ""
}
于 2013-06-13T16:35:22.773 に答える