首页 > 解决方案 > 将输入列表优化为 R 中的变量或函数

问题描述

我正在尝试自动化我的 R 脚本的这一部分,但我不知道如何。本质上,我有这个代码:

  currentmatrix <- datas[,,i]
  data <- as.data.frame(currentmatrix)
  #mod #
  colnames(data) <- c("in1","in2","in3","in4","in5","in6", "in7", "in8", "in9", "in10", "out") #change depending on number of inputs and add to nnet training
  
  #mod #
  nnet <- neuralnet(out~in1+in2+in3+in4+in5+in6+in7+in8+in9+in10, data, hidden=hidden, threshold = threshold, stepmax = 10^7,err.fct = "ce",linear.output = F,likelihood = T)
  

现在,在我有"in1","in2"等的地方,我希望它是一个变量,这样我就可以简单地引用neuralnet(var,data,hidden=hidden,...),而不是每次我想更改输入数量时都将输入输入到函数中。例如,我想有一个创建名为 的字符串的函数f,然后我可以编写 和或类似的东西。f(x)xin[x]colnames(data) <- c(f(x))nnet <- neuralnet(out~f_sum,...)

有没有办法做到这一点?谢谢!

标签: rperformanceoptimizationneural-network

解决方案


您可以使用reformulatewhich 返回一个公式对象。

formula <- reformulate(paste0('in', 1:10), 'out')
formula
#out ~ in1 + in2 + in3 + in4 + in5 + in6 + in7 + in8 + in9 + in10

您还可以使用列名来生成公式。

formula <- reformulate(names(data)[1:10], 'out')

这可以在neuralnet函数中使用。

nnet <- neuralnet(formula, data, hidden=hidden, threshold = threshold, 
                   stepmax = 10^7,err.fct = "ce",linear.output = F,likelihood = T)

推荐阅读