gpt4 book ai didi

从 R 中的 apply() 函数返回多个值

转载 作者:行者123 更新时间:2023-12-04 00:58:54 26 4
gpt4 key购买 nike

我想从 apply() 函数返回多个值并将它们放在 R 中的单独列中,但我不断收到错误。我想做的是:

experiments$result1, experiments$result2, experiments$result3 <- apply(experiments, 1, 
function(row)
#Some analysis here
#return x, y, and z for column result1, result2, and result3
x, y, z
)

也许这是解决问题的错误方法。实验是一个包含多列数据的数据框。我想附加列,这些列是每一行的分析结果,但我不知道如何在没有循环的情况下做到这一点,这对于 R 来说不是惯用的。提前感谢您的帮助。

所以这里有一些更准确的代码。
experiments$result1, experiments$result2, experiments$result3 <- apply(experiments, 1, function(row)
x <- row["startingTemp"]*2
y <- row["startingTemp"]*3
z <- row["startingTemp"]*4
return (list(x, y, z))
)

“startingTemp”字段是我的“实验”数据框中的列之一。我收到“闭包”类型不是子集且找不到对象“z”的错误。

最佳答案

如果您要返回的三个值可以放入一个向量中(即它们不是某种复杂类型,如统计测试或拟合模型的结果),只需返回向量和 apply将其绑定(bind)到 3xN 矩阵。

experiments$result <- apply(experiments, 1, function(row){
x <- row["startingTemp"]*2
y <- row["startingTemp"]*3
z <- row["startingTemp"]*4
c(x, y, z)
})
experiments$result1 <- experiments$result[1,]
experiments$result2 <- experiments$result[2,]
experiments$result3 <- experiments$result[3,]

如果您的三个返回值属于复杂类型(或不是标量),则将它们作为列表返回(如 Alan 建议的那样)并使用 lapply 提取它们/ sapply .
experiment$result1 <- lapply(experiment$result, "[[", 1)

关于从 R 中的 apply() 函数返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12300565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com