Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个R方法可以从Python中这样的函数中检索多个变量?_Python_R - Fatal编程技术网

是否有一个R方法可以从Python中这样的函数中检索多个变量?

是否有一个R方法可以从Python中这样的函数中检索多个变量?,python,r,Python,R,在Python中,可以执行以下操作: def boring_function(x): a = x + 1 b = x - 1 c = x / 1 return a, b, c a, b, c = boring_function(1) 我正在寻找一种在R中使用的等效方法。到目前为止,我一直在尝试制作一个R列表来检索变量,如下所示: boring_function = function(x) {

在Python中,可以执行以下操作:

def boring_function(x):
            a = x + 1
            b = x - 1
            c = x / 1
    return a, b, c

a, b, c = boring_function(1)
我正在寻找一种在R中使用的等效方法。到目前为止,我一直在尝试制作一个R列表来检索变量,如下所示:

boring_function = function(x) {
        
        a = x+1
        b = x-1
        c = x/1
        
        l = list(a = a, b = b, c = c)
        return(l)
}

result = boring_function(1)
a = result[["a"]]
b = result[["b"]]
c = result[["c"]]                   
但是,请注意,这是一个大大简化的示例,实际上我正在生成非常复杂的函数,这些函数需要分别返回值、列表等。在这种情况下,我必须返回一个列表,其中包含值、向量、矩阵、列表中的列表等等。正如你所能想象的,最终结果看起来非常混乱,非常难以处理。想象一下,为了从R函数中得到我的特定结果,我经常不得不这样做:

specific_result = complex_function(x, y, z)[["some_list"]][["another_list"]][["yet_another_list"]][finally_the_result]

我发现这个方法非常混乱,我更喜欢Python方法。但是我必须在R中完成我的工作。似乎不可能有确切的Python方法,但是,在R中有类似的东西吗?如果不是,那么做我想做的事情的最佳方式是什么?

如评论中所述,这在R中是不受支持的。这是Python中的一种实现选择,我认为在R中编程时,按照您描述的方式存储结果是一种糟糕的设计

实际上,如果你“传递”你的列表,将结果附加到列表中会更有意义

res <- list(res1 = a)
res$res2 <- b
# Continuing 

(注意左手需要是一个向量而不是一个列表),但这会牺牲脚本的一些性能。一般来说,更好的方法是考虑“R”如何处理数据,并适当地存储结果。

如评论中所述,这在R中是不受支持的。这是Python中的一种实现选择,我认为在R中编程时,按照您描述的方式存储结果是一种糟糕的设计

实际上,如果你“传递”你的列表,将结果附加到列表中会更有意义

res <- list(res1 = a)
res$res2 <- b
# Continuing 
(注意左手需要是一个向量而不是一个列表),但这会牺牲脚本的一些性能。一般来说,更好的方法是考虑“R”如何处理数据,并适当地存储结果。

1)gsubfngsubfn包支持这一点。有关更多示例,请尝试
帮助(“列表”、“gsubfn”)

library(gsubfn)

boring_function <- function(x) {
  a <- x + 1
  b <- x - 1
  c <- x / 1
  list(a, b, c)
}

list[a, b, c] <- boring_function(0)
a
## [1] 1
b
## [1] -1
c
## [1] 0

# target components can be left unspecified if we don't need them
list[aa,,cc] <- boring_function(0)
aa
## [1] 1
cc
## [1] 0
3)附加我们可以将列表附加到搜索路径。这可能有点令人困惑,因为同名工作区中的变量将屏蔽附加环境中的变量,一般来说,这并没有被广泛使用或推荐,但我们展示了可能的情况。如(2)所示,函数必须返回一个命名列表

attach(boring_function2(0), name = "boring")
a
## [1] 1

# found on search path
grep("boring", search(), value = TRUE)
## [1] "boring"

# remove from search path
detach("boring")
4)快捷方式如果我们有一个命名列表,但继续重复使用上层,我们可以通过多种方式引用叶子,在某些情况下可能更方便

L <- list(a = list(a1 = 1, a2 = 2), b = list(b1 = 3, b2 = 4))

L[["a"]][["a1"]]
## [1] 1

La <- L$a
La$a1
## [1] 1

L[[c("a", "a1")]]
## [1] 1

ix <- c("a", "a1")
L[[ix]]
## [1] 1

L$a$a1
## [1] 1

L[[1:2]]
## [1] 2
1)gsubfngsubfn包支持此功能。有关更多示例,请尝试
帮助(“列表”、“gsubfn”)

library(gsubfn)

boring_function <- function(x) {
  a <- x + 1
  b <- x - 1
  c <- x / 1
  list(a, b, c)
}

list[a, b, c] <- boring_function(0)
a
## [1] 1
b
## [1] -1
c
## [1] 0

# target components can be left unspecified if we don't need them
list[aa,,cc] <- boring_function(0)
aa
## [1] 1
cc
## [1] 0
3)附加我们可以将列表附加到搜索路径。这可能有点令人困惑,因为同名工作区中的变量将屏蔽附加环境中的变量,一般来说,这并没有被广泛使用或推荐,但我们展示了可能的情况。如(2)所示,函数必须返回一个命名列表

attach(boring_function2(0), name = "boring")
a
## [1] 1

# found on search path
grep("boring", search(), value = TRUE)
## [1] "boring"

# remove from search path
detach("boring")
4)快捷方式如果我们有一个命名列表,但继续重复使用上层,我们可以通过多种方式引用叶子,在某些情况下可能更方便

L <- list(a = list(a1 = 1, a2 = 2), b = list(b1 = 3, b2 = 4))

L[["a"]][["a1"]]
## [1] 1

La <- L$a
La$a1
## [1] 1

L[[c("a", "a1")]]
## [1] 1

ix <- c("a", "a1")
L[[ix]]
## [1] 1

L$a$a1
## [1] 1

L[[1:2]]
## [1] 2

这在R中根本不受支持。Hiw在python中深度嵌套的列表不同吗?当然,为了在python中获得最终结果,您也必须深入挖掘?但是你可以这样做:alist$somelist$anitherlist$somebame$finalresultYeah,
specific\u result=…
的问题是你如何设计数据结构的问题,而不是R的问题。它在Python中不会更好。@Sirius,是的,我还必须深入Python。然而,与我在R中的工作方式相比,在Python中使用这些东西要简单得多。这可能只是个人的爱好。另外,我觉得我在R中所做的是错误的,并且不是优秀程序员所喜欢的(我相对来说是新的)。@user2357112supportsMonica我并不是真的认为这是R中的问题。我问R中是否有类似的方法,因为我个人认为,当我必须生成复杂的函数时,提到的R方法非常混乱和复杂。此外,如果没有这样的方法,我仍然对另一种方法感兴趣,这种方法可能比我一直在做的事情稍微简单一些@泽德:这不是用漂亮的语言功能就能解决的问题。如果您需要深入挖掘4个级别以从函数的返回值中获取所需的信息,那么您就有一个设计问题。这在R中根本不受支持。Hiw在python中深度嵌套列表不同吗?当然,为了在python中获得最终结果,您也必须深入挖掘?但是你可以这样做:alist$somelist$anitherlist$somebame$finalresultYeah,
specific\u result=…
的问题是你如何设计数据结构的问题,而不是R的问题。它在Python中不会更好。@Sirius,是的,我还必须深入Python。然而,与我在R中的工作方式相比,在Python中使用这些东西要简单得多。这可能只是个人的爱好。另外,我觉得我在R中所做的是错误的,并且不是优秀程序员所喜欢的(我相对来说是新的)。@user2357112supportsMonica我并不是真的认为这是R中的问题。我问R中是否有类似的方法,因为我个人认为,当我必须生成复杂的函数时,提到的R方法非常混乱和复杂。此外,如果没有这样的方法,我仍然对另一种方法感兴趣,这种方法可能比我一直在做的事情稍微简单一些@泽德:这不是用漂亮的语言功能就能解决的问题。如果您需要向下挖掘4个级别,以便从函数的retu中获取所需的信息