我试图使用data.table执行一个简单的总和和行的意思,但我得到了意想不到的结果.我按照FAQ.table 的FAQ手册第2节的帮助.我发现了一种有效的方法,但我不确定为什么常见问题解答第2节中的这种方法不适用.这个方法给了我不正确的结果(即,它给了我第一列的值):
dt[, genesum:=lapply(.SD,sum), by=gene]
head(dt)
gene TCGA_04_1348 TCGA_04_1362 genesum
1: A1BG 0.94565 0.70585 0.94565
2: A1BG-AS 0.97610 1.15850 0.97610
3: A1CF 0.00000 0.02105 0.00000
4: A2BP1 0.00300 0.04150 0.00300
5: A2LD1 4.57975 5.02820 4.57975
6: A2M 60.37320 36.09715 60.37320
Run Code Online (Sandbox Code Playgroud)
这给了我想要的结果
dt[, genesum:=apply(dt[,-1, with=FALSE],1, sum)]
head(dt)
gene TCGA_04_1348 TCGA_04_1362 genesum
1: A1BG 0.94565 0.70585 1.65150
2: A1BG-AS 0.97610 1.15850 2.13460
3: A1CF 0.00000 0.02105 0.02105
4: A2BP1 0.00300 0.04150 0.04450
5: A2LD1 4.57975 5.02820 …Run Code Online (Sandbox Code Playgroud) 我正在设计一个适合模型的软件包,该模型涉及矩阵列的基础扩展.我想被用户定义的扩张,使任何膨胀是可能的,例如splines::bs,splines::ns,stats::poly.相同的扩展将应用于矩阵的每一列.我试过的一些组合eval和substitute,但不能让它在嵌套函数工作.
我想做什么
set.seed(123)
(mat <- replicate(4, rnorm(10)))
#> [,1] [,2] [,3] [,4]
#> [1,] -0.56047565 1.2240818 -1.0678237 0.42646422
#> [2,] -0.23017749 0.3598138 -0.2179749 -0.29507148
#> [3,] 1.55870831 0.4007715 -1.0260044 0.89512566
#> [4,] 0.07050839 0.1106827 -0.7288912 0.87813349
#> [5,] 0.12928774 -0.5558411 -0.6250393 0.82158108
#> [6,] 1.71506499 1.7869131 -1.6866933 0.68864025
#> [7,] 0.46091621 0.4978505 0.8377870 0.55391765
#> [8,] -1.26506123 -1.9666172 0.1533731 -0.06191171
#> [9,] -0.68685285 0.7013559 -1.1381369 -0.30596266
#> [10,] -0.44566197 -0.4727914 …Run Code Online (Sandbox Code Playgroud)