gpt4 book ai didi

r - 冒号运算符的异常行为 : in R

转载 作者:行者123 更新时间:2023-12-04 00:53:31 26 4
gpt4 key购买 nike

2000:2017

预期输出是一个序列为 2000 到 2017 的向量,步长为 1。

输出:2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017

'2000':'2017'

但是,当我输入这个命令时,它仍然给我相同的输出。

输出:2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017

无法理解它是如何从字符生成序列的。

编辑 1:

最终,我试图理解为什么下面的代码有效? X2007:X2011 怎么可能工作? select 函数来自 dplyr 包。

R code

我的数据也有与上图中提到的相似的列名,但我没有在那里有“X”。我只有 2007、2008 等年份。

对我来说 select(Division, State, 2007:2011) 不起作用。

错误:无法对不存在的列进行子集化。x 位置 2007、2008、2009、2010 和 2011 不存在。

但这有效 select(Division, State, '2007':'2011').

最佳答案

如果我们检查更通用的 seq.default , 它确实改变了 character 的类型至 numeric对于 fromto

...
if (!missing(from) && !is.finite(if (is.character(from)) from <- as.numeric(from) else from))
stop("'from' must be a finite number")
if (!missing(to) && !is.finite(if (is.character(to)) to <- as.numeric(to) else to))
...

沿着这条线,?: 的文档也是这么说的

For other arguments from:to is equivalent to seq(from, to), and generates a sequence from from to to in steps of 1 or -1. Value to will be included if it differs from from by an integer up to a numeric fuzz of about 1e-7. Non-numeric arguments are coerced internally (hence without dispatching methods) to numeric—complex values will have their imaginary parts discarded with a warning.


关于 subset 的更新问题和 select ,如果该列是数字列名,即它以数字开头,则它是一个非标准的列名,并且可以通过反引号对其进行评估

df1 <- data.frame(`2007` = 1:5, `2008` = 6:10, 
`2012` = 11:15, v1 = rnorm(5), check.names = FALSE)
subset(df1, select = `2007`:`2012`)
# 2007 2008 2012
#1 1 6 11
#2 2 7 12
#3 3 8 13
#4 4 9 14
#5 5 10 15

或用dplyr::select

library(dplyr)
select(df1, `2007`:`2012`)
# 2007 2008 2012
#1 1 6 11
#2 2 7 12
#3 3 8 13
#4 4 9 14
#5 5 10 15

如果我们有X在开始时(当我们在没有 check.names = FALSE 的情况下读取数据时发生 - 默认情况下它是 TRUE。或者当我们使用 data.frame 创建数据集时 - 这里也是默认的 check.names = TRUE)

df1 <- data.frame(`2007` = 1:5, `2008` = 6:10, `2012` =  11:15, v1 = rnorm(5))
subset(df1, select = X2007:X2012)

关于r - 冒号运算符的异常行为 : in R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64517967/

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