在做一些更复杂的事情的过程中,我发现了以下内容: 如果我使用do.call将数字矢量转换为列表,那么我将获得与应用函数不同的值,而且不确定为什么。
static void Main(string[] args)
{
string searchText = "Life-Span Development 16E 99 Subject Index";
using (Entities db = new Entities())
{
var result = db.titles
.Join(db.assets,
p => p.tid,
e => e.tid,
(p, e) => new {
title = p.title1,
fileName = e.filename
});
var searchTextArray = searchText.ToLower().Split(' ');
result = result.Where(t => searchTextArray.Any(s => t.title.ToLower().Contains(s)));
foreach(var item in result)
{
Console.WriteLine(string.Format("Title = {0} and finename = {1}", item.title, item.fileName));
}
}
Console.ReadKey();
}
为什么?
注意:我正在尝试使用功能名称向量来运行各种功能。这适用于do.call,但前提是我从do.call获得正确的输出。
感谢您的任何建议。
答案 0 :(得分:1)
所以do.call
期望args
参数是参数列表,因此从技术上讲,我们希望传递list(x = x)
:
> set.seed(123)
> x <- rnorm(10)
> median(x)
[1] -0.07983455
> do.call(median,list(x = x))
[1] -0.07983455
> do.call(median,as.list(x))
[1] -0.5604756
在向量as.list
上调用x
会将其转换为长度为10的列表,就好像您要调用median
并将其传递10个单独的参数一样。但实际上,我们只传递了一个x
。因此最后,它仅获取向量的第一个元素,并将其传递给参数x
。