Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的合法列名和语法无效列名的后果_R - Fatal编程技术网

R中的合法列名和语法无效列名的后果

R中的合法列名和语法无效列名的后果,r,R,为什么这个NA出现在我的数据框中?我没有把它写进我的密码里。还是我 以下是check.names手册页供参考: 检查。名称是否符合逻辑。如果为TRUE,则 检查数据帧以确保它们在语法上有效 变量名。如有必要,可通过make.names对其进行调整,以便 它们是可复制的,并确保没有重复 考虑df$foo,其中foo是一个列名。语法无效的名称将不起作用 至于NA,这是因为第一行有三列,第二行只有两列 考虑df$foo,其中foo是一个列名。语法无效的名称将不起作用 至于NA,这是因为第一行有三列,第

为什么这个NA出现在我的数据框中?我没有把它写进我的密码里。还是我

以下是check.names手册页供参考:

检查。名称是否符合逻辑。如果为TRUE,则 检查数据帧以确保它们在语法上有效 变量名。如有必要,可通过make.names对其进行调整,以便 它们是可复制的,并确保没有重复

考虑df$foo,其中foo是一个列名。语法无效的名称将不起作用

至于NA,这是因为第一行有三列,第二行只有两列

考虑df$foo,其中foo是一个列名。语法无效的名称将不起作用


至于NA,这是因为第一行有三列,第二行只有两列

唯一的结果是您需要转义或引用名称才能使用它们。您可以使用字符串引号并使用[[列子集设置]运算符的标准求值:

df
#>   2019-Jan 2019-Feb   
#> 1        3        1 NA
…或者您用反勾号转义标识符名称,R也会混淆地调用此引用,并使用$subsetting:

df[['2019-Jan']]
这两种方法都可以工作,并且只要它们不会导致非常不可读的代码,就可以自由使用

为了让事情更加混乱,R允许在某些上下文中使用“…”和“…”而不是“…”:

df$`2019-Jan`
就R而言,“2019 Jan”不是字符串!它是一个转义的标识符名称。1

最后一个是一个非常糟糕的主意,因为它将名称2与字符串混淆,这是根本不同的。R文档对此提出了反对意见。就个人而言,我会更进一步:在未来的R版本中,用“foo”而不是“foo”来引用名称应该成为语法错误

1种。R解析器将其视为字符串。特别是,可以使用'and',并且处理方式相同。但是在表达式的后续求值过程中,将其视为名称


2“名称”或“符号”,在R中指代码中表示变量或函数参数的标识符。因此,名称可以是函数声明中的函数名、非函数变量名、参数名或函数调用中的参数名。

唯一的结果是,您需要转义或引用这些名称才能使用它们。您可以字符串引用并使用[[列子集]运算符的标准求值:

df
#>   2019-Jan 2019-Feb   
#> 1        3        1 NA
…或者您用反勾号转义标识符名称,R也会混淆地调用此引用,并使用$subsetting:

df[['2019-Jan']]
这两种方法都可以工作,并且只要它们不会导致非常不可读的代码,就可以自由使用

为了让事情更加混乱,R允许在某些上下文中使用“…”和“…”而不是“…”:

df$`2019-Jan`
就R而言,“2019 Jan”不是字符串!它是一个转义的标识符名称。1

最后一个是一个非常糟糕的主意,因为它将名称2与字符串混淆,这是根本不同的。R文档对此提出了反对意见。就个人而言,我会更进一步:在未来的R版本中,用“foo”而不是“foo”来引用名称应该成为语法错误

1种。R解析器将其视为字符串。特别是,可以使用'and',并且处理方式相同。但是在表达式的后续求值过程中,将其视为名称

2“名称”或“符号”在R中,指代码中表示变量或函数参数的标识符。因此,名称可以是函数声明中的函数名、非函数变量名、参数名或函数调用中的参数名。

NA问题与名称无关。read.csv希望输入的l后面没有逗号AST列。在最后一列之后有逗号,所以Read .CSV在2019 FEB之后读取空白,作为第三列的列名。该列没有数据,因此分配NA值。

删除多余的逗号,它就会正确读取。当然,在使用read.csv后删除最后一列可能会更容易

< N>问题与名称无关。Read .CSV在最后一列之后期待没有逗号的输入。在最后一列之后有逗号,因此Read .CSV在2019 FEB之后读取空白,作为第三列的列名。该列没有数据,因此分配NA值。

删除多余的逗号,它就会正确读取。当然,在使用read.csv后删除最后一列可能会更容易


可能要添加一个语法无效的名称示例,例如以数字开头的名称可能要添加一个语法无效的名称示例,例如以数字开头的名称处理此问题的最佳策略是什么?除了接受默认名称X2019.Jan,X2019.Feb之外?是否接受默认名称
有多好?不能用数字引导列名是不理想的。谢谢你的回答。@JasonHunter我的回答中显示的解决方案有什么问题?我经常使用这样的列名。@JasonHunter我想我们是在扯淡:我确实使用了可读的名称,这些名称在我的工作流程中始终可能是无效的R标识符。所以我不需要重命名列名来显示,因为它们已经“漂亮”了。我确实看错了你的答案。我不知道什么是坏主意。我认为你提出的三个解决方案中的任何一个都不适合使用,而你却建议不要这样做。但似乎我可以使用它们,只要我知道后果。我现在就是这样。谢谢您的跟进。@JasonHunter哦,让我澄清一下,我将编辑答案:只有最后一种解决方案是个坏主意:不要混淆带引号的字符串和转义标识符的语法。一般来说,使用转义标识符是可以的,也许只要你不太过火,但是,呃,处理这个问题的最佳策略是什么?除了接受默认名称X2019.Jan、X2019.Feb之外?接受默认值是否已经足够好了?不能用数字引导列名是不理想的。谢谢你的回答。@JasonHunter我的回答中显示的解决方案有什么问题?我经常使用这样的列名。@JasonHunter我想我们是在扯淡:我确实使用了可读的名称,这些名称在我的工作流程中始终可能是无效的R标识符。所以我不需要重命名列名来显示,因为它们已经“漂亮”了。我确实看错了你的答案。我不知道什么是坏主意。我认为你提出的三个解决方案中的任何一个都不适合使用,而你却建议不要这样做。但似乎我可以使用它们,只要我知道后果。我现在就是这样。谢谢您的跟进。@JasonHunter哦,让我澄清一下,我将编辑答案:只有最后一种解决方案是个坏主意:不要混淆带引号的字符串和转义标识符的语法。一般来说,使用转义标识符是可以的,也许只要你不太过火,但是呃。