【问题标题】:How to get elements of a vector of strings without the symbol [ ]如何获取不带符号 [] 的字符串向量的元素
【发布时间】:2019-06-28 12:34:52
【问题描述】:

如何获取不带符号 [1] 的字符串向量的元素?

v <- c("a","b","c")
for (i in seq_along(v)) {
  print(v[i])
}

我得到的不是“a”、“b”、“c”:

[1] "a"
[1] "b"
[1] "c"

但是当我使用as.symbol

for (i in seq_along(v)) {
  print(as.symbol(v[i]))
}

我得到:

a
b
c

没有任何 []

【问题讨论】:

  • 使用cat 而不是print
  • writeLines
  • 你知道 R 没有标量吗?向量的元素是长度为一的向量。

标签: r string vector


【解决方案1】:

print 是一个具有误导性名称的函数。更准确的名称是show_value_in_interactive_console(但这是少数)。它的目的实际上只是为了在交互式 R 控制台中显示值。它适合其他用途。

当您确实想向用户显示值或将它们保存到文件时,您确实想使用print。相反,您想使用

  • 用于向用户显示值:messagewarning(或 stop
  • 用于将值的文本表示形式保存到文件或以其他方式将它们暴露给系统:writeLinescat

以上所有这些通常与formatsprintfas.charactertoString结合使用,它们执行将值实际转换为文本。

哦,as.symbol 与上述完全无关,不应该在这里使用。它碰巧完全出于您的目的。

【讨论】:

  • cat 存在之前我并不知道,最好使用它向系统公开值而不是print,但我只在我的问题中使用了print使它更简单。事实上,我真正想要的是使用v[i]as.symbol(v[i]) 作为函数的参数。我遇到了困难,我错误地认为原因是[ ]。事实并非如此,该功能运行良好。
【解决方案2】:

您可以使用as.symbol 打印,如果您需要符号的索引,只需在之前打印i

    for (i in seq_along(v)) {
      print(i)
      print(as.symbol(v[i]))
}

输出看起来像

0
a
1
b
2
c

【讨论】:

  • print 在 99% 的情况下都是错误的。
  • 是的,你说得对,我个人用的是“cat”,但我用的是 print,因为他用的是它,这样他更容易理解
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 2020-12-30
  • 2019-07-30
  • 2016-02-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
相关资源
最近更新 更多