尝试在 R 中应用创建的函数
Try to apply a created function in R
我正在努力学习如何使用函数和应用。所以首先我想了解两者是如何工作的。
这是一个基本示例。我正在创建一个函数,该函数根据列的值使用一种算法或另一种算法:
datos = data.frame(replicate(5,sample(0:10,10,rep=TRUE)))
calculo <- function(variable) {
aa = variable * 2
if (variable < 5) {
aa = 0
}
return(aa)
}
datos$Y1 = apply(datos, 1, FUN=function(x) calculo(datos$X1))
我在这个例子中的简单想法是:
- 如果X1的值<5,则值为0。
- 如果 >= 5,则乘以 2。
当我应用它时,我认为该条件同时应用于 datos$X1 中的所有值,而不是逐行应用。所以它并没有像我想的那样工作。
有没有办法逐行应用条件?
谢谢
只需使用
datos$Y1 <- calculo(datos$X1)
您还可以稍微精简一下您的功能(不确定哪个版本更快):
calculo <- function(variable) {
aa <- ifelse(variable < 5, 0, variable * 2)
return(aa)
}
这给出(由于 datos
生成的随机性,您可能看起来有所不同:
X1 X2 X3 X4 X5 Y1
1 5 0 3 8 9 10
2 3 6 1 3 3 0
3 6 2 5 2 5 12
4 8 0 9 8 2 16
5 1 6 10 5 0 0
6 6 1 7 9 10 12
7 0 0 10 1 10 0
8 10 8 8 1 4 20
9 9 0 6 5 3 18
10 0 9 0 5 4 0
更新:我在 tidyverse 中的首选方式。
library(tidyverse)
datos <- datos %>%
mutate(Y1 = if_else(X1 < 5, 0, X1 * 2))
我正在努力学习如何使用函数和应用。所以首先我想了解两者是如何工作的。
这是一个基本示例。我正在创建一个函数,该函数根据列的值使用一种算法或另一种算法:
datos = data.frame(replicate(5,sample(0:10,10,rep=TRUE)))
calculo <- function(variable) {
aa = variable * 2
if (variable < 5) {
aa = 0
}
return(aa)
}
datos$Y1 = apply(datos, 1, FUN=function(x) calculo(datos$X1))
我在这个例子中的简单想法是:
- 如果X1的值<5,则值为0。
- 如果 >= 5,则乘以 2。
当我应用它时,我认为该条件同时应用于 datos$X1 中的所有值,而不是逐行应用。所以它并没有像我想的那样工作。
有没有办法逐行应用条件?
谢谢
只需使用
datos$Y1 <- calculo(datos$X1)
您还可以稍微精简一下您的功能(不确定哪个版本更快):
calculo <- function(variable) {
aa <- ifelse(variable < 5, 0, variable * 2)
return(aa)
}
这给出(由于 datos
生成的随机性,您可能看起来有所不同:
X1 X2 X3 X4 X5 Y1
1 5 0 3 8 9 10
2 3 6 1 3 3 0
3 6 2 5 2 5 12
4 8 0 9 8 2 16
5 1 6 10 5 0 0
6 6 1 7 9 10 12
7 0 0 10 1 10 0
8 10 8 8 1 4 20
9 9 0 6 5 3 18
10 0 9 0 5 4 0
更新:我在 tidyverse 中的首选方式。
library(tidyverse)
datos <- datos %>%
mutate(Y1 = if_else(X1 < 5, 0, X1 * 2))