使用 rnorm 函数根据数据框中的另一列创建新列

时间:2021-01-19 16:29:32

标签: r function

我正在尝试在 rnorm 函数中使用列值并创建新的列绑定数据框。

> show(tablo)
      teta
1 14.67078
2 14.86293
3 15.54010
4 15.91335
5 16.05241
6 15.24349
7 15.01060
8 14.79570

每个 teta 值都是 rnorm 函数中的平均值。首先我创建了函数

values <- function(x)
{
rnorm(1, x, 0.55)
}
values(tablo$teta) or attach(tablo) values(teta)

这个函数只显示一个值。

这很奇怪。

a <- 1:10

test <- function(x) {
    x +20
}

test(a)

此函数显示 a 的所有新值。

2 个答案:

答案 0 :(得分:1)

您应该在 length(x) 中使用 1 而不是 rnorm,例如,

rnorm(length(x),x,0.55)

答案 1 :(得分:0)

使用 apply 函数系列(例如 sapply)函数,因为您想在向量的每个元素上使用函数 values。以下应该完成这项工作:

sapply(tablo$teta,values)
#[1] 14.88455 14.07981 15.19649 16.12940 16.42719 14.69165 14.27466 13.57540

您的 test 函数无需使用 sapply 即可工作,因为 R 中的 + 运算是向量运算。但是,它不适用于 values 函数,因为在 rnorm 中,如果 n(第一个参数)为 1,则平均值(即第二个参数)应作为标量传递(而在您的问题中将其传入作为向量)。