【问题标题】:R Create and Invoke Dynamic Variable NameR 创建和调用动态变量名称
【发布时间】:2019-07-25 14:16:58
【问题描述】:

我想生成动态(使用循环中的索引号)并稍后调用它,如下所示:

for (i in seq(1,10)) {
 p_i <- i^2 #here _i is a dynamic value which is equate to the current i value
 d_i <- (p_i-20)*15 # here _i for both d_i and p_i are all dynamic
 }

非常感谢您的专业知识

【问题讨论】:

  • 你不需要循环。 i &lt;- 1:10; p &lt;- i^2; d &lt;- (p-20)*15 将在一个向量中为您提供所有结果,您只需对该向量进行子集化即可提取其元素。
  • @RLave 请不要向新手提及该功能。他们不需要知道它的存在。
  • 我的例子比我放在这里的例子要复杂得多,能否请您详细说明如何实现动态创建和调用它?
  • @EastLiu myvector &lt;- numeric(10); for (i in 1:10) {...; myvector[[i]] &lt;- ...} 如果您的数据无法存储在向量中,请使用列表。
  • @Roland。我认为最好解释一下为什么assign 是最糟糕的解决方案,以及为什么我们需要使用一种结构来避免环境中的人工索引。

标签: r variables dynamic


【解决方案1】:

这是有效的答案,但我不会使用,因为重新创建人工结构不是一个好习惯,而是使用向量或列表。

for (i in seq(1,10)) {
  assign(paste0("p_", i), i^2)
  assign(paste0("d_", i), (get(paste0("p_", i))-20)*15)
}

我会使用使用索引的矢量化解决方案来访问您想要的内容:

p <- (1:10)^2
d <- (p-20)*15

【讨论】:

  • 这正是我想要的。非常感谢。
  • 请考虑阅读RLave 评论并避免在您的代码中使用assign
猜你喜欢
  • 2014-09-02
  • 2015-02-27
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 2011-10-27
相关资源
最近更新 更多