我找不到原因Test1,并且Data$Test1在我的代码中不相同。见下文;
library("data.table")
Data <- fread("
V1 V2 V3
14 24.70762 17.3329292
8 25.01303 19.7530632
1 18.87427 -0.7832386
14 23.43488 14.9795652
14 24.43762 20.7145533
8 29.85930 3.7763770
17 27.66289 1.8315841
1 21.28808 79.7883210
1 24.55836 70.0779117
1 13.01046 27.3039891")
Function <- function(v1, v2, v3){
ff <- function(wt){
mod2 <- 1.399666
j2 <- -0.4142602
alpha <- 0.895474
X_mu <- ifelse(wt >= j2*100,
wt - j2*100,
0)
mia <- X_mu/(alpha*100)
weibull <- mod2/(alpha*100) * mia^(mod2 - 1) *
exp(-mia^mod2)
return(weibull)
}
my.f.si <- function(wt){
epsilon = 0.008213571
fnl <- (ff(wt) / epsilon)
return(fnl)
}
SiS <- lapply(1:5, function(XX){
pot = c(0.1012141, 0.1012141, 0.1410539,
0.1581489, 0.1775243)
theta0 = c(-3.651407, -3.651407, -3.804682,
-3.607503, -3.603890)
theta1 = 0.2181257
Pot <- pot[XX]
The0 <- theta0[XX]
The1 <- theta1
Si <- 6 + (Pot*100 - 6) *
my.f.si(wt = v3) *
((1 + exp(-(The0 + The1 * v2)))^-1)
return(Si)
})
SiS <- do.call("c", SiS)
MiN <- abs((SiS - v1) / v1)
## return(MiN)
GetQ <- which(MiN == min(MiN))
LengTh <- length(GetQ)
return(LengTh)
}
##################################
Test1 <- sapply(1:nrow(Data), function(T){
Function(v1 = Data[T, V1],
v2 = Data[T, V2],
v3 = Data[T, V2])})
##################################
Data[, Test1 := Function(v1 = V1,
v2 = V2,
v3 = V2)]
##################################
Test1
Data$Test1
Run Code Online (Sandbox Code Playgroud)
我们可以按行顺序进行分组
Data[, Test1 := Function(V1, V2, V2), by = 1:nrow(Data)]
Run Code Online (Sandbox Code Playgroud)
或者另一种选择是Vectorize函数并直接应用
Data[, Test1 := Vectorize(Function)(V1, V2, V2)]
Run Code Online (Sandbox Code Playgroud)
-检查
> Data$Test1
[1] 1 2 2 1 1 2 1 2 2 2
> Test1
[1] 1 2 2 1 1 2 1 2 2 2
Run Code Online (Sandbox Code Playgroud)