我有以下代码。使用数据帧的列参数计算R函数
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)
当我写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")
这是正确的方法吗?
@RomanLuštrik:我很乐意,但你需要什么样的背景呢?上面给出的代码是完整的,我想。我只想用'numparam'函数在给定的数据帧上进行操作,以指定的方式获得另一个数据帧。什么不清楚?这是我正在使用的实际代码。我想我可以想出一个更简单的例子来说明,虽然这不是很复杂。 –
'numparam_modeltrue'和'numparam_modelresult'是否是因素? –
@RomanLuštrik:不,只是字符串。我修改了对'cbind'的调用。 –