【问题标题】:Parsing a vector in R在 R 中解析向量
【发布时间】:2019-02-06 19:06:46
【问题描述】:

我在 R 中有一些问题,我不知道出了什么问题。

我有一个包含数据框名称的向量:

variable_name <- c("radius_mean","texture_mean","perimeter_mean","area_mean","smoothness_mean","compactness_mean","concavity_mean","concave points_mean","symmetry_mean")

我尝试使用 variable_name 作为函数的参数:as.formula

as.formula(paste("diagnosis ~", paste(v_name, collapse = " + ")))

基本上我试图在 R 中象征性地生成一个公式来得到这样的东西:

diagnosis ~ radiums_mean + texture_mean + ... + concave points_mean

但我不断收到此错误消息:

解析错误(文本 = x,keep.source = FALSE): :1:133: 意外符号 1:诊断~radius_mean + texture_mean + perimeter_mean + area_mean + smoothness_mean + compactness_mean + concavity_mean + concave points_mean

                                               ^

但是,当我从我的 variable_name 向量中删除字符“concave points_mean”时:说

variable_name_new <- c("radius_mean","texture_mean","perimeter_mean","area_mean","smoothness_mean","compactness_mean","concavity_mean")

as.formula(paste("diagnosis ~", paste(variable_name_new, collapse = " + ")))
diagnosis ~ radius_mean + texture_mean + perimeter_mean + area_mean + 
smoothness_mean + compactness_mean + concavity_mean

我能够得到我想要的。所以我的问题是,当我在 variable_name 向量中有字符“concave points_mean”时,第一个向量有什么问题? 我真的不知道是什么导致了问题。

【问题讨论】:

  • 问题是“concave points_mean”里面​​有空格,名字中不允许有空格。最简单的解决方法是删除空格。

标签: r


【解决方案1】:

用反引号括住每个变量名:

paste("diagnosis ~", paste(sprintf("`%s`", variable_name), collapse = "+"))

另一种可能性是DF 是保存数据的数据框。它避免了必须命名变量,因此非语法名称不会干扰。

lm(diagnosis ~., DF[c("diagnosis", variable_name)])

如果除了diagnosisvariable_name 中的名称之外没有其他变量名称,那么它可以缩短为:

lm(diagnosis ~., DF)

这也可以:

lm(DF[c("diagnosis", variable_name)])

【讨论】:

  • 嗨,谢谢。但是我可以知道反引号是做什么的吗?因为我看到我的 variable_name 向量现在有这个:“radius_mean”“texture_mean
  • 变量名前后各有一个``
  • 还有 s 的百分号是什么? %s?
  • 如果变量名称在反引号内,则该名称将被视为有效名称,即使它本来不会如此。阅读?sprintf 以获取有关其论点的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 2021-02-10
相关资源
最近更新 更多