gpt4 book ai didi

当未提供函数的参数但用于对向量进行子集化时,R 不会报告错误

转载 作者:行者123 更新时间:2023-12-04 14:08:46 25 4
gpt4 key购买 nike

为什么在函数内部没有提供b但需要b时没有报错?谢谢!

f2 <- function(a,b) {a[b]}; f2(a=rep(1, 2))

我知道这个函数没有错误:
f <- function(x) {
10
}
f(stop("This is an error!"))

由于懒惰的评估
但是这个
f <- function(x) {
force(x)
10
}
f(stop("This is an error!"))

或这个
f <- function(x) {
x
10
}
f(stop("This is an error!"))

会产生错误。因为在这两种情况下 x 都是 二手 函数内。以上两个例子均来自 http://adv-r.had.co.nz/Functions.html .由于 b 也是 二手 在f2内,是否需要在f2内加力?谢谢!

最佳答案

x[b]返回(重复)x如果 b不见了。从 R 源:

static SEXP VectorSubset(SEXP x, SEXP s, SEXP call)
{
R_xlen_t stretch = 1;
SEXP indx, result, attrib, nattrib;

if (s == R_MissingArg) return duplicate(x);

https://github.com/wch/r-source/blob/ec2e89f38a208ab02449b706e13f278409eff16c/src/main/subset.c#L169

从文档中,“空”表示“丢失”,而不是 NULL :

An empty index selects all values: this is most often used to replace all the entries but keep the attributes.

关于当未提供函数的参数但用于对向量进行子集化时,R 不会报告错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50033675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com