小编ste*_*r25的帖子

在编写自己的函数时如何使用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万
查看次数

有没有办法在超出范围之前释放绑定?

我正在尝试使用正则表达式解析文件:

extern crate regex; // 1.0.1

use regex::Regex;

fn example(
    section_header_pattern: Regex,
    section_name: &str,
    mut line: String,
    mut is_in_right_section: bool,
) {
    loop {
        if let Some(m) = section_header_pattern
            .captures(&line)
            .and_then(|c| c.get(1))
        {
            is_in_right_section = m.as_str().eq(section_name);
            line.clear();
            continue;
        }
    }
}

fn main() {}
Run Code Online (Sandbox Code Playgroud)

......但是编译器会抱怨,因为RegExcaptures()方法有哪些承受了本场比赛的一生借:

error[E0502]: cannot borrow `line` as mutable because it is also borrowed as immutable
  --> src/main.rs:17:13
   |
13 |             .captures(&line)
   |                        ---- immutable borrow occurs here
...
17 |             line.clear();
   |             ^^^^ …
Run Code Online (Sandbox Code Playgroud)

rust borrow-checker

10
推荐指数
1
解决办法
212
查看次数

React Navigation V2:navigation.push和navigation.navigate之间的区别

我是React Native的新手,我正在研究React Native Navigation Docs.我在想:navigation.push()和之间有什么区别navigation.navigate()

我试着自己找出来,但他们似乎完成了同样的事情......

reactjs react-native react-navigation

10
推荐指数
3
解决办法
8082
查看次数

Thrift/Erlang字符串

我正在尝试在Erlang中编写一个简单的Thrift服务器,它接受一个字符串并返回一个字符串.

一切似乎都在努力调用我的功能:

handle_function(Function, Args) when is_atom(Function), is_tuple(Args) ->
case apply(?MODULE, Function, tuple_to_list(Args)) of
    ok -> ok;
    Reply -> {reply, Reply}
end.

test([X]) ->
"You sent: " ++ X.
Run Code Online (Sandbox Code Playgroud)

我得到了一个function_clause.堆栈跟踪显示以下内容:

{function_clause,[{server,test,[<<"w00t">>]},
{server,handle_function,2},...

我的handle_function是从教程文件中复制的,所以如果我需要调整它,我不会感到惊讶.有任何想法吗?

erlang thrift

4
推荐指数
1
解决办法
1276
查看次数

Scala:具有匹配和副作用的条件产量?

以下内容的正确语法是什么?

var foo = 0
someIterator.foreach{ x => x.property match {
  case "a" => foo += 1
  case "b" => yield "current foo" + foo
}}
Run Code Online (Sandbox Code Playgroud)

即,我正在尝试迭代someIterator.当它匹配一件事时,它应该通过闭包更新局部变量; 当它遇到另一个时,它应该产生一些当前状态的推导到结果迭代器,保留连续迭代的状态.

scala

4
推荐指数
1
解决办法
628
查看次数

如何在一行继续之后正确地转义一个带引号的命令?

运行以下示例批处理文件,

echo foo &&^
"C:\Program Files\Internet Explorer\iexplore.exe"
Run Code Online (Sandbox Code Playgroud)

...产生以下输出:

foo
'"C:\Program' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

编辑

标记为,这个问题是处理Windows(XP)批处理文件.

windows batch-file

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