我有以下代码。
completemodel <- function(model, colnum)
{
modlst = c()
tuplenum = length(model)
if(tuplenum != 0)
for(i in 1:tuplenum)
modlst = c(modlst, model[[i]])
index = seq(0, colnum-1)
inddiff = setdiff(index, modlst)
inddifflen = length(inddiff)
for(i in seq(length.out=inddifflen))
model = append(model, inddiff[i])
return(model)
}
## Calculate number of parameters in model.
numparam <- function(mod, colnum)
{
library(RJSONIO)
mod = fromJSON(mod)
mod = completemodel(mod, colnum)
totnum = 0
for(tup in mod)
totnum = totnum +(4**length(tup))
return(totnum)
}
x = cbind.data.frame(rownum=c(100, 100), colnum=c(10, 20), modeltrue=c("[]", "[]"), modelresult=c("[[1,2]]","[[1,3]]"), stringsAsFactors=FALSE)
> x
rows colnum modeltrue modelresult
1 100 10 [] [[1,2]]
2 100 20 [] [[1,3]]
我该如何操作x
才能给我一个如下所示的数据框?numparam("[]", 10)
当然,这里我的意思是当我写的时候 eg 的值numparam("[]", 10)
。
rownum colnum numparam_modeltrue numparam_modelresult
100 10 numparam("[]", 10) numparam("[[1,2]]", 10)
100 20 numparam("[]", 20) numparam("[[1,3]]", 20)
某些版本的 apply 函数可能会起作用,但我在找到合适的公式时遇到了问题。
更新:似乎如果rownnum
,colnum
元组不是唯一的,那么可以执行以下操作。
x = cbind.data.frame(id=c(1, 2, 3), rownum=c(100, 100, 100), colnum=c(10, 20, 20), modeltrue=c("[]", "[]", "[]"),
modelresult=c("[[1,2]]","[[1,3]]","[[1,3, 4]]"), stringsAsFactors = FALSE)
##Then, create a data.table and set the key
library(data.table)
xDT <- as.data.table(x)
setkeyv(xDT, c("id", "rownum", "colnum")
那是正确的方法吗?