假设我正在编写一个带有签名
的函数foo
foo <- function (bar, baz, frobozz, quux = TRUE, frotz = 42) {
# etc.
}
如果在这个函数体内,我希望得到函数在运行时收到的实际参数的命名列表,我可以定义
actual_args <- list(bar = bar, baz = baz, frobozz = frobozz, quux = quux,
frotz = frotz)
...但是这个分配很难维护,因为每次添加,删除或重命名参数时都需要修改它。 (更不用说写作也很乏味。)
有没有办法初始化actual_args
对于函数签名的未来变化保持不变?
答案 0 :(得分:3)
请参阅?match.call
foo <- function(a, b, c, d, ...)
match.call()
foo(1, 2, 3, bar, e=baz())
# foo(a = 1, b = 2, c = 3, d = bar, e = baz())
这是一个调用对象,其第一个参数是名为(在这种情况下为foo
)的函数的名称。其他参数是foo
的未评估的参数。
foo(1, 2, 3, bar, e=baz())[[1]]
# foo
foo(1, 2, 3, bar, e=baz())[[2]]
# 1
# the name of a variable
foo(1, 2, 3, bar, e=baz())[[5]]
# bar
# a function call
foo(1, 2, 3, bar, e=baz())[[6]]
# baz()
答案 1 :(得分:2)
您可以在函数中使用 import {Component, OnInit, ElementRef} from '@angular/core';
import * as D3 from 'd3';
import {FetchDataComponent} from '../fetch-data/fetch-data.component';
@Component({
selector: 'app-dubai-dual-line-chart',
templateUrl: './dubai-dual-line-chart.component.html',
styleUrls: ['./dubai-dual-line-chart.component.css'],
providers: [FetchDataComponent]
})
export class parseData implements OnInit {
public csv;
constructor(private __fetchDataComponent: FetchDataComponent) {}
ngOnInit() {
this.getCsv();
}
private getCsv() {
this.__fetchDataComponent.getCsv().subscribe(
data => {
this.csv = data
},
err => console.error(err),
() => console.log('done loading csv')
)
}
}
来获取所定义的所有变量的列表。如果您在函数启动后立即调用,则会获得所有参数的列表。然后,您可以使用ls()
将这些值放入列表中。例如
mget()
这适用于您的foo<-function(a,b,c) {
mget(ls())
}
/ do.call
方案
mapply