【问题标题】:R- creating a function that creates names of variablesR-创建一个创建变量名称的函数
【发布时间】:2018-05-29 01:14:10
【问题描述】:

我想创建一个根据其参数创建名称的函数。 我试过了:

a <- function(x){ assign(paste("train",x,sep=""),4]) } 

但是,例如,当我执行a(3) 时,什么也没有发生。怎么了?

感谢您的帮助。

编辑:我会根据要求更具体。

我想做一个特征选择:想法是使用一个函数来生成不同的特征子集,为每个子集生成一个训练集,然后在另一个函数中使用这个函数的输出(比如说 lm() )测试每个训练集。子集/训练集的数量是可变的,我不知道如何存储它们以便以后重新使用它们。

【问题讨论】:

  • 分配未在全局环境中完成。 (如果您不知道这意味着什么,请不要使用assign。)这个问题需要一个用例,因此可以建议更正确的方法。创建一堆“松散”变量确实是个坏主意。以编程方式管理它们将让您度过一段地狱般的时光。

标签: r function variables


【解决方案1】:

您需要在全局环境(或您希望变量所在的任何环境)中分配变量。

> a <- function(x) { assign(paste('train', x, sep = ''), 4, envir = .GlobalEnv) }
> ls()
[1] "a"
> a(1)
> ls()
[1] "a"      "train1"

【讨论】:

  • 是的,这行得通(所以 +1),但很可能,@mobupu,无论你想要做什么,这都是错误的方式。一般来说,应该避免assign,从函数内部到全局环境更是如此。有更多的 R-native 方式来做这样的事情,而且,这种方式会导致难以阅读的代码,从而导致错误。
  • 什么是更原生的 R 方式?诚然,我在自己的工作中不使用assign。我同意它很难阅读。
  • 在不知道用例是什么的情况下很难准确地说出来,但很可能是带有列表的东西。即使只是myvars &lt;- list(); a &lt;- function(mylist, name, number) {mylist[[name]] &lt;- number; mylist} 也是可能的。
  • 感谢您的所有回答。我现在发现,走这条路确实是个坏主意。
  • @mobupu 在这种情况下,创建一个子集列表,就像 Aaron 建议的那样,并使用像 lapply 这样的函数(它将一个函数应用于列表的每个元素并返回一个列表)来运行 @987654326 @ 在每个子集上。这将为您提供lm 对象列表,然后您可以对其进行进一步分析。
猜你喜欢
  • 2019-04-10
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2019-07-25
相关资源
最近更新 更多