1

我有两个代码片段,我希望它们的行为相同,但它们没有:

  position <- function(t) {
    coordinates <- c(cosh(t), sinh(t))

    return(coordinates[1])
  }

  position <- function(t) {
    coordinates <- c(cosh(t), sinh(t))

    return(cosh(t))
  }

我使用该函数position绘制曲线。第一个片段没有绘制曲线。使用第二个片段绘制曲线。

两个片段之间的功能差异是什么,为什么?

4

3 回答 3

3

返回的内容取决于传递的参数类型。如果参数“t”是一个矩阵,正如设计用于处理坐标的函数所预期的那样,那么矩阵将从cosh(t)和 from返回sinh(t)

第一个函数将只返回形成的矩阵的第一个元素,然后“拉直”,因为该c函数导致它松散了尺寸。如果您想保留矩阵字符,请使用rbindcbind取决于下一个处理数据的函数。

第二个函数将首先计算“坐标”,然后让它消失在垃圾收集器中,因为它返回的是由 形成的矩阵cosh(t)

您将无法获得更好的答案,因为您目前正在让我们都猜测您传递给函数的数据结构类型。您应该dput()将参数的结果发布到此函数。你应该告诉我们绘图函数的帮助页面期望什么作为参数类型。

于 2012-12-02T16:36:54.207 回答
1

的结果

coordinates <- c(cosh(t), sinh(t))

是长度的数值向量2 * length(t)

命令

return(coordinates[1])

仅返回此向量的第一个值。(coordinates[1]和的结果cosh(t)仅在 时相同length(t) == 1。)要返回 的结果,您可以使用基于 的长度的序列进行cosh(h)索引:coordinatest

coordinates <- c(cosh(t), sinh(t))

return(coordinates[seq_along(t)])
于 2012-12-02T16:07:17.213 回答
0

在您的第一个示例中使用双括号。

  coordinates[[1]]


作为故障排除时的有用提示,如果您使用str(position(x))两个不同的功能探索两个功能的输出,您应该会看到差异。

也试试

   str(vec[1])
   str(vec[[1]])
于 2012-12-02T16:01:51.833 回答