是l_ply
还是其他一些类似应用的函数能够将结果插入现有数据框?
这是一个简单的例子......
假设我有以下数据框:
mydata <- data.frame(input1=1:3, input2=4:6, result1=NA, result2=NA)
input1 input2 result1 result2
1 1 4 NA NA
2 2 5 NA NA
3 3 6 NA NA
我想循环遍历行,执行操作,然后在result1
和result2
列中插入答案。我试过了:
l_ply(1:nrow(mydata), function(i) {
mydata[i,"result1"] <- mydata[i,"input1"] + mydata[i,"input2"]
mydata[i,"result2"] <- mydata[i,"input1"] * mydata[i,"input2"]})
但我在结果列中使用NA's
取回原始数据框。
P.S。我已经阅读了post,但它并没有完全回答我的问题。我有几个结果列,我想要执行的操作比上面的操作更复杂,所以我更喜欢不分别计算列,然后将它们添加到数据帧之后该帖子表明。
答案 0 :(得分:1)
我认为可能有一种普通方法,但在基地R中这似乎非常容易和明确:
> mydata[3:4] <- with(mydata, list( input1+input2, input1*input2) )
> mydata
input1 input2 result1 result2
1 1 4 5 4
2 2 5 7 10
3 3 6 9 18
即使你得到了plyr代码来提供有用的东西,你仍然没有将结果分配给任何东西,所以它会在垃圾收集的耀眼阳光下蒸发掉。请注意,如果您遵循@Vlo的建议,您可能会在控制台上看到可能导致您认为“mydata”的结果。已更新,但“mydata”对象将保持不变。您需要将值分配回原始对象。对于dplyr操作,您通常会分配整个对象。
答案 1 :(得分:0)
您不需要使用 draw.probit <- function(xy, beta1,beta2,minv,maxv,
mod,lwd,lty, add,from,to){
# Aufruf der Funktion f.probit zur Verbesserung der y-Werte
#f <- f.probit(xy[,1],beta1=beta1,beta2=beta2,minv=minv,maxv=maxv)
# Ersetzen der Y-Werte mit der Verbesserung
#xy[,2] = f
if (add){ # TODO: Falls add = TRUE, dann die Kurve im geöffneten Fenster hinzufügen
selected_FUN <- function(x) {
f.probit(x, beta1=beta1,beta2=beta2,minv=minv,maxv=maxv)
}
draw.data(xy, add, mod, selected_FUN)
#curve(f.probit(x,beta1=beta1,beta2=beta2,minv=minv,maxv=maxv),add=T,mod=model,lwd=lwd,lty=lty)
}else{ # TODO: Falls add = FALSE, dann die Kurve in ein neues Fenster hinzufügen
selected_FUN <- function(x) {
f.probit(x,beta1=beta1,beta2=beta2,minv=minv,maxv=maxv)
}
draw.data(xy, add, mod, select_FUN)
#curve(f.probit(x,beta1=beta1,beta2=beta2,minv=minv,maxv=maxv),from=from,to=to,mod=model,lwd=lwd,lty=lty)
}
}
或其变体。相反,您可以利用apply
向量化:
R