0
私はベクトル化しようとしてきた関数をif(){}
からifelse()
に持っています。関数のすべての引数が、処理中のデータセット内に含まれている場合はうまく動作しますが、文字列として引数を指定すると、ベクトル化が停止し、最初の結果がデータセット全体に使用されます。ここで与えられた変数を持つ関数をベクトル化する
はしかし、私は別で、この機能を使用したい。これは、私が何を期待VAR1とVAR2
> dat
var1 var2 var3
1 0 a zero
2 1 a 1
3 0 a zero
4 1 a 1
5 0 b 0
6 1 b ONE
7 0 b 0
8 1 b ONE
に基づいて行方向に値を持つベクトルを返す
# data
dat <- data.frame(var1 = rep(c(0,1), 4),
var2 = c(rep("a", 4), rep("b", 4))
)
# function
my_fun <- function(x, y){
z <- ifelse(y == "a", fun_a(x), fun_b(x))
return(z)
}
fun_a <- function(x){
z <- ifelse(x == 0, "zero", x)
return(z)
}
fun_b <- function(x){
z <- ifelse(x == 1, "ONE", x)
return(z)
}
dat$var3 <- my_fun(dat$var1, dat$var2)
例ですvar2が含まれていないデータセット。簡単な方法は、データセットに余分な列としてvar2を追加することですが、実際にはそうしたくありません。
これは私が文字列としてVAR2を供給するときに何が起こるかです:
other_dat <- data.frame(var1 = rep(c(0,1), 4))
other_dat$var3 <- my_fun(other_dat$var1, y = "a")
other_dat
var1 var3
1 0 zero
2 1 zero
3 0 zero
4 1 zero
5 0 zero
6 1 zero
7 0 zero
8 1 zero
それは文字列引数を受け入れ、私が望む結果を返すように、私はこの機能をvectoriseできますか?
コードを更新しました。 –
完璧、ありがとう。それは私が見逃した素晴らしい解決策です。 –