r - R 中的合法列名和语法无效列名的后果
问题描述
df <- read.csv(
text = '"2019-Jan","2019-Feb",
"3","1"',
check.names = FALSE
)
好的,所以我使用check.names = FALSE
并且现在我的列名在语法上无效。实际后果是什么?
df
#> 2019-Jan 2019-Feb
#> 1 3 1 NA
为什么这会NA
出现在我的数据框中?我没有把它放在我的代码中。还是我?
这是check.names
供参考的手册页:
check.names
合乎逻辑。如果为 TRUE,则检查数据框中的变量名称以确保它们是语法上有效的变量名称。如有必要,它们会被调整(通过 make.names),以确保它们没有重复。
解决方案
唯一的后果是您需要转义或引用名称才能使用它们。您可以使用字符串引用并使用带有[[
列子集运算符的标准评估:
df[['2019-Jan']]
... 或者您使用反引号转义标识符名称(R 混淆地也称为此引用),并使用$
子集:
df$`2019-Jan`
两者都可以工作,并且可以自由使用(只要它们不会导致非常不可读的代码)。
为了使事情更加混乱,R 允许在某些情况下使用'…'
and"…"
而不是:`…`
df$'2019-Jan'
这里,'2019-Jan'
就R 而言,不是一个字符串!这是一个转义的标识符名称。1
最后一个是一个非常糟糕的主意,因为它将名称2与根本不同的字符串混淆了。R 文档建议不要这样做。就我个人而言,我会更进一步:写作'foo'
而不是`foo`
引用名称应该成为未来版本的 R 中的语法错误。
1种。R解析器将其视为字符串。特别是,两者'
都"
可以使用,并且被同等对待。但是在表达式的后续计算过程中,它被视为一个名称。
2 R 中的“名称”或“符号”是指代码中表示变量或函数参数的标识符。因此,名称可以是 (a) 函数名称,(b) 非函数变量名称,(c) 函数声明中的参数名称,或 (d) 函数调用中的参数名称。
推荐阅读
- discord - 如何在 Discord.JS 中创建一个比角色层次结构中的其他角色高一点的角色?
- python - 使用 py2app 创建独立应用程序
- android - Flutter SfCartesianChart 不显示 X 。Y 轴
- c++ - 如何获取 beast::flat_buffer 中的数据?
- javascript - jquery ajax调用后插件不起作用,
- r - 在 R 中匹配通配符模式和字符串
- r - eval 中的错误(exprs[i],envir):找不到对象“confint.default”
- javascript - 我正在学习 JavaScript 谁能告诉我我做错了什么?总和应该给我和 8
- reactjs - 获取端点后的快速重定向不起作用
- python - 在 Python 中运行下标的优雅方式