R子集整数序列
R subsetting an integer sequence
我有一个整数序列 y<-1:6 和一个整数对象 f<-5
现在,如果我将子集应用到此序列为
y[f=5] returns 5
y[f<3] returns numeric(0)
y[f>3] returns 1 2 3 4 5 6
请帮助我理解 [] 中的表达式求值。
括号内的三个语句做的事情根本不同:
第一行将5
赋值给f
,然后用它来子集y
.1
第二行和第三行比较f
与3
(小于或大于),并使用结果比较(第一种情况下的 FALSE
,第二种情况下的 TRUE
)到子集 y
.
现在,使用逻辑值进行子集化只是选择 y
内的所有值,其相应的给定索引为 TRUE
。由于您只给出了一个逻辑索引,但 y
包含六个值,因此逻辑索引是 recycled – 即 FALSE
变成 rep(FALSE, length(y))
(TRUE
也是如此)。因此各自的结果。
1 实际上比这稍微复杂一点,因为在函数调用的参数列表中使用 =
赋值不会赋值给变量,它会赋值给同名参数:
test = function (a) a
test(1) # returns 1
test(a = 1) # also returns 1
test(b = 1) # error: unused argument (b = 1)
而子集化 (y[f]
) 只是 R 中的一个函数调用。它调用一个名为 [
的函数,因此等同于
`[`(y, f)
自己试试吧! [
周围的反引号是必需的,因为通常 [
不是有效的函数名称。为了像常规函数名称一样使用它,R 需要在反引号之间放置特殊字符。
既然 []
函数调用没有名为 f
的参数,那么为什么 y[f = 5]
不报错呢?原因是 [
是一个 原语 而不是普通的 R 函数调用,并且原语完全忽略参数名称。
使用 <-
的赋值方式不同,它总是在当前范围内赋值给一个新变量,即使它在函数调用中使用也是如此:
y[f <- 1] # returns the first element of y
f # is now 1, not 5!
这叫做逻辑索引。
如果 f 是一个向量,f>3
将生成一个由 TRUE 或 FALSE 元素组成的逻辑向量,然后可用于对 y 进行索引。
但在您的情况下,f>3
是一个简单的标量,因此会生成一个逻辑值 (TRUE),然后将其用于通过回收索引到 y...即相当于全真索引值。
我有一个整数序列 y<-1:6 和一个整数对象 f<-5 现在,如果我将子集应用到此序列为
y[f=5] returns 5
y[f<3] returns numeric(0)
y[f>3] returns 1 2 3 4 5 6
请帮助我理解 [] 中的表达式求值。
括号内的三个语句做的事情根本不同:
第一行将
5
赋值给f
,然后用它来子集y
.1第二行和第三行比较
f
与3
(小于或大于),并使用结果比较(第一种情况下的FALSE
,第二种情况下的TRUE
)到子集y
.现在,使用逻辑值进行子集化只是选择
y
内的所有值,其相应的给定索引为TRUE
。由于您只给出了一个逻辑索引,但y
包含六个值,因此逻辑索引是 recycled – 即FALSE
变成rep(FALSE, length(y))
(TRUE
也是如此)。因此各自的结果。
1 实际上比这稍微复杂一点,因为在函数调用的参数列表中使用 =
赋值不会赋值给变量,它会赋值给同名参数:
test = function (a) a
test(1) # returns 1
test(a = 1) # also returns 1
test(b = 1) # error: unused argument (b = 1)
而子集化 (y[f]
) 只是 R 中的一个函数调用。它调用一个名为 [
的函数,因此等同于
`[`(y, f)
自己试试吧! [
周围的反引号是必需的,因为通常 [
不是有效的函数名称。为了像常规函数名称一样使用它,R 需要在反引号之间放置特殊字符。
既然 []
函数调用没有名为 f
的参数,那么为什么 y[f = 5]
不报错呢?原因是 [
是一个 原语 而不是普通的 R 函数调用,并且原语完全忽略参数名称。
使用 <-
的赋值方式不同,它总是在当前范围内赋值给一个新变量,即使它在函数调用中使用也是如此:
y[f <- 1] # returns the first element of y
f # is now 1, not 5!
这叫做逻辑索引。
如果 f 是一个向量,f>3
将生成一个由 TRUE 或 FALSE 元素组成的逻辑向量,然后可用于对 y 进行索引。
但在您的情况下,f>3
是一个简单的标量,因此会生成一个逻辑值 (TRUE),然后将其用于通过回收索引到 y...即相当于全真索引值。