代码之家  ›  专栏  ›  技术社区  ›  lorny

R循环中的自动递增变量名

  •  0
  • lorny  · 技术社区  · 6 年前

    我试图创建一个函数,它会自动创建n个变量,命名为x1,x2。。。,xn。我有一种方法,它只能通过控制台工作,不能在函数中工作(runif创建一个1000个介于-1和1之间的数字数组,应该将其分配给变量):

    for(i in 1:n) {
       assign(sprintf("x%d",i),runif(1000,min=-1,max=1))
    }
    

    当我在函数中使用它时,不会在环境中创建变量。。。

    我试着做这样的东西:

    for(i in 1:n) {
       sprintf("x%d",i) <- runif(1000,min=-1,max=1))
    }
    

    但这会返回错误 “分配目标扩展为非语言对象”

    有人能给我一个提示吗?Thx提前了很多时间!

    1 回复  |  直到 6 年前
        1
  •  0
  •   JayCe    6 年前

    是否确实要创建不同的变量?R方法是创建矩阵或数据。框起并使用它。如果您真的需要1000个变量,那么https://stackoverflow.com/q/1236620/9670603“>这个问题给出了:

    <-函数(n)(1:n中的i){ 分配(sprintf(“x%d”,i),runif(1000,min=-1,max=1),envir=。GlobalEnv) } f(10) x5级

    在线试用

    但你真的应该这样做:

    <-功能(n){ x<-矩阵(runif(1000*n),ncol=n) colnames(x)<-粘贴0(重复(“x”,n),1:n) 十、 } f(10)

    提供:

    f<-function(n)for(i in 1:n){
        assign(sprintf("x%d",i),runif(1000,min=-1,max=1),envir = .GlobalEnv)
    }
    f(10)
    x5
    

    但你真的应该这样做:

    f<-function(n){
    x <- matrix(runif(1000*n),ncol=n)
    colnames(x) <-paste0(rep("x",n),1:n)
    x
    }
    f(10)
    

    在线试用!