我正在运行一个带有预定义函数的脚本,该函数在给出所需的最终结果之前计算了几个副产品。现在我想通过产品'grep'一些产品,因为我需要它们进行进一步的计算。
我认为正常的做法是将函数f中的元素(比方说,t)称为f $ t。但是,如果我确实得到类型为closure的错误对象不是subsetable。有没有办法从函数中提取出来?
谢谢
答案 0 :(得分:1)
您无法访问函数中的局部变量,但可以根据需要返回它们。
例如,如果你有:
myfunct <- function(x, y)
{
val1 <- x + y
val2 <- x - y
result <- val1 * val2
return(result)
}
您唯一可以访问的是最终结果。
如果您想要访问val1
和val2
,可以执行以下操作:
myfunct <- function(x, y)
{
val1 <- x + y
val2 <- x - y
result <- val1 * val2
return(list(res=result, valsum=val1, valdiff=val2))
}
您现在可以:
test <- myfunct(10, 20)
print(test$valsum)
print(test$valdiff)
print(test$res)
答案 1 :(得分:0)
有一种更好的方法可以将函数的局部变量输出到全局环境中。 R提供了一个特殊的赋值运算符,在这里派上用场。
myfunct&lt; - function(x,y) {
val1 <<- x + y
val2 <<- x - y
result <- val1 * val2
return(result)
}
请注意赋值运算符中的额外字符。这样做的是变量val1和val2在全局环境中分配,同时您可以使用它来计算结果。你只需从函数返回结果。你可以继续在全球环境中玩val1和val2。
在几条评论之后编辑:我同意一般来说这不是一个好的功能。但你必须了解问题的要求。我的理解是有一个预先编写的功能正在使用已经有一个表格。现在在这种情况下很多时候你想要调试函数而不想改变函数的形式。
因此,如果你想要输出一个内部变量,那么在不触及函数返回的内容的情况下,R的这个特性非常方便。但我同意,在您关闭当天的R之前,请确保已删除此运营商的所有实例。