在R中访问函数中的变量

在R中访问函数中的变量,r,R,我想知道是否有可能简化以下函数的代码(即,如果代码部分:d0=p$d0,d11=p$d11,d12=p$d12,k11=p$k11,k12=p$k12可以被某个函数替换),因为我只是通过列表p访问传递给函数的变量 这是函数的R代码: equation = function(p){ d0 = p$d0 d11 = p$d11 d12 = p$d12 k11 = p$k11 k12 = p$k12 result = d0 + d11*k11 + d12*k12 r

我想知道是否有可能简化以下函数的代码(即,如果代码部分:d0=p$d0,d11=p$d11,d12=p$d12,k11=p$k11,k12=p$k12可以被某个函数替换),因为我只是通过列表p访问传递给函数的变量

这是函数的R代码:

equation = function(p){

  d0 =  p$d0
  d11 = p$d11
  d12 = p$d12
  k11 = p$k11
  k12 = p$k12

  result = d0 + d11*k11 + d12*k12

  return(result)
}

equation(list(d0=1,d11=2,d12=3,k11=100,k12=1000))

您只需将元素作为函数参数传递:

equation <- function(d0, d11, d12, k11, k12){
  d0 + d11*k11 + d12*k12
}

equation( d0=1, d11=2, d12=3, k11=100, k12=1000)
[1] 3201

等式您只需将元素作为函数参数传递:

equation <- function(d0, d11, d12, k11, k12){
  d0 + d11*k11 + d12*k12
}

equation( d0=1, d11=2, d12=3, k11=100, k12=1000)
[1] 3201

等式另一个选项是使用
Zeellot
包,该包具有解包分配
%另一个选项是使用
Zeellot
包,该包具有解包分配
%不需要任何花哨的东西。您没有足够的资源,在每个文件前面键入
p$
过于繁重,您不需要在本地分配任何内容<代码>返回
不是必需的,因此我们实际上可以使用单行正文编写函数,如下所示:

equation <- function(p){
    p$d0 + p$d11*p$k11 + p$d12*p$k12
}

等式不需要任何花哨的东西。您没有足够的资源,在每个文件前面键入
p$
过于繁重,您不需要在本地分配任何内容<代码>返回
不是必需的,因此我们实际上可以使用单行正文编写函数,如下所示:

equation <- function(p){
    p$d0 + p$d11*p$k11 + p$d12*p$k12
}

等式我使用list2env(p,envir=environment())找到了解决方案


方程(列表(d0=1,d11=2,d12=3,k11=100,k12=1000))

我使用列表2ENV(p,envir=environment()找到了解决方案


方程(列表(d0=1,d11=2,d12=3,k11=100,k12=1000))

您不需要将它们分配给局部变量
p$d0+p$d11*p$k11+p$d12*p$k12
可能是你函数的全部内容。@Dason请在更复杂(而不是更简单)的问题被接受之前将其作为答案提出…
equation@Spacedman我没有将其作为答案来写,因为我认为这个问题并不完全合适。看起来更像是代码审查类型的东西。但我想我会把它作为一个答案,因为我确实认为它可能是解决这个特定问题和其他我不太喜欢的答案的最佳方法。你应该将你的解决方案作为答案发布,而不是将其编辑到你的问题中。你不需要将它们分配给局部变量
p$d0+p$d11*p$k11+p$d12*p$k12
可能是你函数的全部内容。@Dason请在更复杂(而不是更简单)的问题被接受之前将其作为答案提出…
equation@Spacedman我没有将其作为答案来写,因为我认为这个问题并不完全合适。看起来更像是代码审查类型的东西。但我想我会把它作为一个答案,因为我确实认为它可能是解决这个问题和其他我并不真正喜欢的答案的最佳方法。你应该将你的解决方案作为答案发布,而不是将其编辑到你的问题中。