R 如果使用局部变量,函数返回值将更改
我有两段代码,我希望它们的行为是相同的,但它们不是:R 如果使用局部变量,函数返回值将更改,r,R,我有两段代码,我希望它们的行为是相同的,但它们不是: position <- function(t) { coordinates <- c(cosh(t), sinh(t)) return(coordinates[1]) } position在第一个示例中使用双括号 coordinates[[1]] 作为故障排除时的有用提示,如果您使用两个不同函数的str(位置(x))探索这两个函数的输出,您应该会看到差异 也试试 str(vec[1])
position <- function(t) {
coordinates <- c(cosh(t), sinh(t))
return(coordinates[1])
}
position在第一个示例中使用双括号
coordinates[[1]]
作为故障排除时的有用提示,如果您使用两个不同函数的str(位置(x))
探索这两个函数的输出,您应该会看到差异
也试试
str(vec[1])
str(vec[[1]])
在第一个示例中使用双括号
coordinates[[1]]
作为故障排除时的有用提示,如果您使用两个不同函数的str(位置(x))
探索这两个函数的输出,您应该会看到差异
也试试
str(vec[1])
str(vec[[1]])
结果
coordinates <- c(cosh(t), sinh(t))
仅返回此向量的第一个值。(只有当长度(t)=1
时,坐标[1]
和cosh(t)
的结果才是相同的)要返回cosh(h)
的结果,您可以根据t
的长度按顺序索引坐标
:
coordinates <- c(cosh(t), sinh(t))
return(coordinates[seq_along(t)])
坐标的结果
coordinates <- c(cosh(t), sinh(t))
仅返回此向量的第一个值。(只有当长度(t)=1
时,坐标[1]
和cosh(t)
的结果才是相同的)要返回cosh(h)
的结果,您可以根据t
的长度按顺序索引坐标
:
coordinates <- c(cosh(t), sinh(t))
return(coordinates[seq_along(t)])
坐标返回的内容将取决于传递的参数类型。如果参数“t”是设计用于处理坐标的函数所期望的矩阵,则从cosh(t)
和sinh(t)
返回矩阵
第一个函数只返回形成的矩阵的第一个元素,然后将其“拉直”,因为c
函数导致其尺寸松散。如果要保留矩阵字符,则根据处理数据的下一个函数,使用rbind
或cbind
第二个函数将首先计算“坐标”,然后让它消失在垃圾收集器中,因为它返回由cosh(t)
形成的矩阵
您将无法得到更好的答案,因为您目前正在让我们猜测您将传递给函数的是哪种数据结构。您应该将参数上的dput()
结果发布到此函数。您应该告诉我们plotting函数的帮助页面希望参数类型是什么。返回的内容将取决于传递的参数类型。如果参数“t”是设计用于处理坐标的函数所期望的矩阵,则从cosh(t)
和sinh(t)
返回矩阵
第一个函数只返回形成的矩阵的第一个元素,然后将其“拉直”,因为c
函数导致其尺寸松散。如果要保留矩阵字符,则根据处理数据的下一个函数,使用rbind
或cbind
第二个函数将首先计算“坐标”,然后让它消失在垃圾收集器中,因为它返回由cosh(t)
形成的矩阵
您将无法得到更好的答案,因为您目前正在让我们猜测您将传递给函数的是哪种数据结构。您应该将参数上的dput()
结果发布到此函数。您应该告诉我们plotting函数的帮助页面希望参数类型是什么。如果您查看cosh(t)和坐标[1]的输出,您会发现它们明显不同。正如@sven所指出的,你想要使用一个列表,你想要用双括号引用。“坐标”不能是一个列表,因为cosh
和sinh
将返回矩阵或向量(或者如果t是一个列表,则返回一个错误)。所以c(cosh(t),sinh(t))将是一个向量,使用“[[”将导致一个错误。如果你看cosh(t)和坐标[1]的输出,你会发现它们明显不同。正如@sven指出的,你想要使用一个列表,你想要用双括号引用。“坐标”不能是列表,因为cosh
和sinh
将返回矩阵或向量(如果t是列表,则返回错误)。因此c(cosh(t),sinh(t))将是向量,并使用“[[”会导致错误。谢谢。这是向前迈出的一步。但现在我无法向列表中添加向量,并对其进行矩阵乘法。@Randomblue我相应地修改了我的答案。我很困惑。seq_沿途做了什么?x
在您的示例中是什么?我想修改位置
(例如位置+c(1,1)
),然后提取第一个坐标。@对不起,我用t
替换了x
。函数seq\u-along(t)
创建一个从1到length(t)
的序列。例如:seq\u-along(c(3,5,2,6,1))==c(1,2,3,4,5)
。seq_沿途
操作是不必要的。只需返回(坐标)
就可以得到相同的结果,但如果目标是返回矩阵,则是c()
导致问题的步骤。谢谢。这是向前迈出的一步。但现在我无法向列表中添加向量,并对其进行矩阵乘法。@Randomblue我相应地修改了我的答案。我很困惑。seq_沿途做了什么?在你的示例中是什么?x
我想修改位置
(例如位置+c(1,1)
),然后提取第一个坐标。@trandomblue抱歉,我用t
替换了x
。函数seq_-along(t)
创建一个从1到长度(t)
的序列。例如:seq_-along(c(3,5,2,6,1))==c(1,2,3,4,5)
。不需要seq_-along操作。您可以