相关疑难解决方法(0)

在编写自己的函数时如何使用R的省略号功能?

R语言有一个很好的功能,用于定义可以采用可变数量参数的函数.例如,该函数data.frame接受任意数量的参数,并且每个参数都成为结果数据表中列的数据.用法示例:

> data.frame(letters=c("a", "b", "c"), numbers=c(1,2,3), notes=c("do", "re", "mi"))
  letters numbers notes
1       a       1    do
2       b       2    re
3       c       3    mi
Run Code Online (Sandbox Code Playgroud)

函数的签名包括省略号,如下所示:

function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, 
    stringsAsFactors = default.stringsAsFactors()) 
{
    [FUNCTION DEFINITION HERE]
}
Run Code Online (Sandbox Code Playgroud)

我想编写一个类似的函数,获取多个值并将它们合并为一个返回值(以及进行一些其他处理).为了做到这一点,我需要弄清楚如何...从函数中的函数参数"解包" .我不知道该怎么做.功能定义中的相关行data.frameobject <- as.list(substitute(list(...)))[-1L],我无法理解.

那么如何将省略号从函数的签名转换为例如列表呢?

更具体地说,我如何写get_list_from_ellipsis下面的代码?

my_ellipsis_function(...) {
    input_list <- get_list_from_ellipsis(...)
    output_list <- lapply(X=input_list, FUN=do_something_interesting)
    return(output_list)
}

my_ellipsis_function(a=1:10,b=11:20,c=21:30)
Run Code Online (Sandbox Code Playgroud)

编辑

似乎有两种可能的方法来做到这一点.他们是as.list(substitute(list(...)))[-1L]list(...).但是,这两者并没有完全相同.(有关差异,请参阅答案中的示例.)任何人都可以告诉我它们之间的实际区别是什么,我应该使用哪一个?

parameters r function ellipsis variadic

175
推荐指数
5
解决办法
5万
查看次数

从函数中抓取对象名称

标题不是超级描述性的,因为问题比我能想到的合理标题更长.

我希望有一个函数可以从其他函数中获取对象名,这些函数可以在另一个函数中用作参数.这是一个准确的尝试:

grab <- function(x) {
    as.character(substitute(x))
}

FUN <- function(foo, bar = grab(foo)) {
    bar
}

FUN(mtcars)
Run Code Online (Sandbox Code Playgroud)

在这里,我想FUN返回字符串"mtcars",但它返回"foo".如何制作一个抓取功能来执行此操作(我想这样做,因为我将使用它作为txt/csv等文件的默认设置.这是一个方便的设置.

以下是一些不成功的尝试(但我希望有一个通用的抓取功能):

FUN2 <- function(foo, bar = as.character(substitute(bar))) {
   bar
}

FUN2(mtcars)

#==================

FUN3 <- function(foo, bar) {
    if(missing(bar)) bar <- foo
    as.character(substitute(bar))
}

FUN3(mtcars)
Run Code Online (Sandbox Code Playgroud)

现实生活中的例子:

real_example <- function(obj, file = grab(obj)) {
    write.csv(obj, file = sprintf("%s.csv", file))
}
Run Code Online (Sandbox Code Playgroud)

r

8
推荐指数
2
解决办法
211
查看次数

如何在函数中获取传递给...的参数的名称?

可能重复:
使用substitute获取参数名称

请注意,这与使用矢量本身list(...)或某种形式的东西不同....在完成任何解析之前,我希望能够做的只是'echo'传入的所有参数.

例如:我想要一个可能就像:

f(apple, banana, car)
## --> returns c("apple", "banana", "car"), 
## ie, skips looking for the objects apple, banana, car
Run Code Online (Sandbox Code Playgroud)

我得到的最接近的是

f <- function(...) {
  return( deparse( substitute( ... ) ) )
}
Run Code Online (Sandbox Code Playgroud)

但这只会返回第一个被"抓住"的参数....思考?

r

3
推荐指数
1
解决办法
1134
查看次数

R:`rbind`,列表示绑定

我想要rbind两个数据帧,在结果data.frame中有一个额外的列,指示哪个行来自哪个data.frame.例如,

top <- mtcars[1:16, ]
bottom <- mtcars[17:32, ]

rbind(top, bottom)
Run Code Online (Sandbox Code Playgroud)

这会给我,

                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3 …
Run Code Online (Sandbox Code Playgroud)

r data-manipulation dataframe rbind

3
推荐指数
1
解决办法
113
查看次数