【问题标题】:Name variable via a loop R通过循环命名变量 R
【发布时间】:2018-12-07 14:20:25
【问题描述】:

我目前正在研究一个函数,该函数将返回一个点和 p 个簇之间的距离。

which_cluster<-function(coord){
cluster<-get_cluster(data) # return a matrix
 nbr_clusters=nrow(cluster)
 nbr_dim=ncol(cluster)
 liste<-c()

 for(i in 1:nbr_clusters){
  dist_c_i=0
  for (j in nbr_dim){
   paste('vec_', i, sep = '') 
   dim_j_c_i=cluster[i,j]
   dist_c_i<-dist_c_i+ (dim_j_c_i-coord[i])^2
  }
  dist_c_i<-sqrt(dist_c_i)
  liste<-liste[,dist_c_i]
  }

 return(liste)
 }

我希望变量名中的“i”和“j”被识别为 for 循环的 i 和 j。

感谢您的帮助。放轻松,我是初学者;)

【问题讨论】:

  • 嗨!您能否提供数据样本?
  • 以及您期望的输出示例
  • GET_CLUSTER(数据)返回包含集群中心位置的矩阵:DIM 1 DIM 2 DIM 3 DIM 4 DIM 5 1 -0219219 1.1548797 6.18750358 4.01138314 7.01138314 7.01138314 7.8136751 7.89237995 -0.197602 1.0297995555 3 0.5433915 -0.20207333 -0.1827094 -0.003705857 -0.02186797 4 -1.0740043 0.17493668 0.3216816 -0.184568336 -0.02079380

标签: r loops variables rstudio cluster-analysis


【解决方案1】:

不要。

声明过多的变量很慢,而且难以管理。

改为使用列表和矩阵。

当您似乎试图做一个距离矩阵时,将其存储为一个矩阵,由 I 和 j 索引,即dist[i,j]

【讨论】:

    【解决方案2】:

    paste0() 之后使用assign()

    assign(paste0("dim_", j, "_c_", i), cluster[i,j]) 
    

    【讨论】:

    • 和 get(paste0("dim_",j,"_c_",i) 当在
    • 感谢您的评论,我使用的矩阵不大。最多 5 列和 5 行,这就是为什么我不在乎使用 2 个“for 循环”。
    • @K.优策。我不是在考虑内存消耗,而是在考虑速度。此外,您的代码对于其他读者来说会有点神秘。当您需要索引时,您使用向量和数组而不是变量集合。在此之前您是否与 SAS 合作过?
    • 从来没有。我已经学习 R 一个星期了。此代码用于获取欧几里得距离
    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2014-06-17
    • 2016-11-13
    • 1970-01-01
    • 2014-08-30
    • 2021-12-30
    • 2019-02-03
    • 2015-08-10
    相关资源
    最近更新 更多