【问题标题】:Creating Variables via String Inputs通过字符串输入创建变量
【发布时间】:2013-12-08 19:26:22
【问题描述】:

我正在尝试创建一个生成变量的循环。但我需要一种使用输入法命名变量的方法。在变量生成中输入字符串名称的约定是什么

x="变量" y =“重量” z="身高"

xy=粘贴(x,y,sep="") xz=paste(x,y,sep="")

xy_one=1:10 xy_two=11:20

所以 xy_one 应该命名为 VariableWeight_one 和 xz_two 应该是名称 Variableheight_two

【问题讨论】:

    标签: r


    【解决方案1】:

    同意 Carl 不要那样做,但我认为他的方法可以通过使用“[[”而不是“$”来改进。试试:

    myVars<-list()
    x="Variable"; y="Weight"; z="Height"
    myVars[[ paste(x,y,"_one", sep="")]] <- 1:10
    myVars[[ paste(x,z,"_one", sep="")]] <- 11:20
    

    如果你真的还想构造名字,我会写一个合适的补充:

     x="Variable"; y="Weight"; z="Height"
     assign( paste(x,y,"_one", sep=""),  1:10)
     assign( paste(x,z,"_one", sep=""), 11:20)
     ls(patt="Variable")
    [1] "VariableHeight_one" "VariableWeight_one"
    

    比较使用您的方法创建的第一个变量可能需要付出的努力(和语言迂回)与从 myVars 中提取第一个元素的简单程度:

     eval(parse( text=ls(patt="Variable")[1] ))
    # [1] 11 12 13 14 15 16 17 18 19 20
    
      myVars[[1]]
    # [1]  1  2  3  4  5  6  7  8  9 10
    

    (此外,它甚至不是正确的。)

    【讨论】:

      【解决方案2】:

      真正的答案是:不要那样做。创建listdataframe 变量,将数据转储到相同的元素中,然后为这些元素分配名称,要容易得多,而且效率更高。在你的情况下,

      mydata<- list()
      mydata$VariableWeight_one <- xy_one
      mydata$Variableheight_two <- xy_two
      

      【讨论】:

      • 感谢卡尔的回复。但归根结底,我正在尝试创建一种在整个循环中生成变量的方法。我需要 R 中使用的约定将字符串输入到变量名称中。
      • for (i in c("abe","john","ryan","carl") {i_score=i}
      • @jessica 那么你将不得不研究臭名昭著的eval(parse(foo)) 构造——或者DWin 的assign() 方法。
      猜你喜欢
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多