我有两个代码片段,我希望它们的行为相同,但它们不会:
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
绘制曲线。对于第一个片段,不绘制曲线。使用第二个片段绘制曲线。
两个片段之间的功能差异是什么?为什么?
答案 0 :(得分:3)
返回的内容取决于传递的参数类型。如果参数“t”是设计用于处理坐标的函数可能需要的矩阵,则从cosh(t)
和sinh(t)
返回矩阵。
第一个函数只返回形成的矩阵的第一个元素,然后“整理”,因为c
函数导致它松散。如果您想保留矩阵字符,请使用rbind
或cbind
,具体取决于处理数据的下一个函数。
第二个函数首先计算“坐标”,然后让它消失在垃圾收集器中,因为它返回由cosh(t)
形成的矩阵。
您现在无法获得更好的答案,因为您现在正在猜测您传递给函数的数据结构类型。您应该将dput()
的结果发布到此函数的参数上。您应该告诉我们绘图函数的帮助页面需要什么作为参数类型。
答案 1 :(得分:1)
的结果
coordinates <- c(cosh(t), sinh(t))
是长度为2 * length(t)
的数字向量。
命令
return(coordinates[1])
仅返回此向量的第一个值。 (coordinates[1]
和cosh(t)
的结果仅在length(t) == 1
时相同。)要返回cosh(h)
的结果,您可以使用基于的序列索引coordinates
t
的长度:
coordinates <- c(cosh(t), sinh(t))
return(coordinates[seq_along(t)])
答案 2 :(得分:0)
在第一个示例中使用双括号。
coordinates[[1]]
作为故障排除时的一个有用提示,如果您使用str(position(x))
探索两个函数的两个不同函数的输出,您应该看到差异。
尝试
str(vec[1])
str(vec[[1]])