【问题标题】:How to get the name of a variable as a string in a loop?如何在循环中将变量的名称作为字符串获取?
【发布时间】:2019-12-20 15:37:35
【问题描述】:

我想创建一个函数来正确显示一些 R 变量的名称。

我尝试使用deparse(substitute(variable)),它工作正常,但我无法让它在循环中工作

a = 5
b = 6
c = 7
myobjects = c(a, b, c)

for (i in 1:3){
  cat(deparse(substitute(myobjects [i])), " : ", myobjects [i], "\n")
}

返回

myobjects[i]  :  5 
myobjects[i]  :  6 
myobjects[i]  :  7

而不是

a : 5
b : 6
c : 7

【问题讨论】:

  • 您可以创建一个命名对象而不是myobjects - c(a, b, c),因为myobjects 只存储对象'a'、'b'、'c'的值

标签: r string variables names


【解决方案1】:

“myobjects”仅包含对象“a”、“b”、“c”的值。如果我们需要获取原始对象,创建一个名为vector 并获取names

myobjects <- c(a = a, b = b, c = c)
for(i in 1:3) cat(names(myobjects[i]), " : ", myobjects[i], "\n")
#a  :  5 
#b  :  6 
#c  :  7 

或者如 cmets 中提到的@IceCreamToucan,它可以被矢量化(没有for 循环),因为paste 进行矢量化

cat(paste0(names(myobjects), ' : ', myobjects), '\n', sep = '\n')

【讨论】:

  • cat(paste0(names(myobjects), ' : ', myobjects), sep = '\n')
  • @IceCreamToucan 好建议,但要小心,您的语句缺少终止 '\n',并且这将导致它在某些系统上无法打印任何内容!(例如我的.) cat 打印的字符串必须以换行符结束。
  • 很高兴知道。所以它应该是cat(paste0(names(myobjects), ' : ', myobjects), '\n', sep = '\n'),而不是为了便携性?
  • @IceCreamToucan 不幸的是,是的。我实际上认为这是 macOS 上的 R 3.5 中的一个错误,随后被修复(错误,因为该行为未记录且不一致)。
猜你喜欢
  • 1970-01-01
  • 2010-09-20
  • 2017-08-24
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
相关资源
最近更新 更多