我知道这个问题过去曾被问过(例如,这里和这里),但这些问题已经存在多年并且尚未解决。我想知道从那时起是否创建了任何解决方案。问题是 R 中的 Matrix 包无法处理长向量(长度大于 2^31 - 1)。就我而言,由于内存和时间限制,运行 XGBoost 模型需要稀疏矩阵。XGBoostxgb.DMatrix支持使用dgCMatrix对象。但是,由于我的数据大小,尝试创建稀疏矩阵会导致错误。这是这个问题的一个例子。(警告:这使用 50-60 GB RAM。)
i <- rep(1, 2^31)
j <- i
j[(2^30): length(j)] <- 2
x <- i
s <- sparseMatrix(i = i, j = j, x = x)
Run Code Online (Sandbox Code Playgroud)
validMethod(as(object, superClass)) 中的错误:尚不支持长向量:../../src/include/Rinlinedfuns.h:137
截至2019年,这个问题有解决方案吗?
我正在使用该包的最新版本Matrix,1.2-15。
给定一个数据框,我想使用每列的分位数来过滤每列。我更喜欢使用 dplyr/tidyverse 来完成此任务。
set.seed(23)
df <- data.frame(
x1 = runif(10, 0, 100),
x2 = runif(10, 0, 100),
x3 = runif(10, 0, 100)
)
df
> df
x1 x2 x3
1 57.66037 86.59590 58.63978
2 22.30729 70.14217 27.47410
3 33.18966 39.04731 14.76570
4 71.07246 31.47697 80.14103
5 81.94490 84.59473 38.64098
6 42.37206 13.92785 82.04507
7 96.35445 51.81206 68.49373
8 97.81304 59.35508 88.33893
9 84.05219 94.24617 11.19208
10 99.66112 62.80196 77.88340
> quantile(df$x1, .95)
95%
98.82949
> quantile(df$x2, .95)
95%
90.80355
Run Code Online (Sandbox Code Playgroud)
我想要的结果将是 …
这是我的数据的一个例子.
ll <- list(
ll1 = list(Mi = 1:4,
Mj = 10:13,
dn = "l1"),
ll2 = list(Mi = 5:8,
Mj = 14:17,
dn = "l2"))
> str(ll)
List of 2
$ ll1:List of 3
..$ Mi: int [1:4] 1 2 3 4
..$ Mj: int [1:4] 10 11 12 13
..$ dn: chr "l1"
$ ll2:List of 3
..$ Mi: int [1:4] 5 6 7 8
..$ Mj: int [1:4] 14 15 16 17
..$ dn: chr "l2"
Run Code Online (Sandbox Code Playgroud)
我正在尝试将每个Mi,每个Mj和每个dn组合在一起.因此最终结果将是3个向量:1个组合Mi,1个组合Mj,以及1个组合dn.即,Mi的最终结果将是类似的 …
我正在尝试使用字符变量作为新列的名称以及by.
library(data.table)
dt <- data.table(g = rep(1:3, 4), xa = runif(12), xb = runif(12))
# desired output
dt[, .(sa = mean(xa)), by = g]
g sa
1: 1 1.902360
2: 2 2.149041
3: 3 2.586044
Run Code Online (Sandbox Code Playgroud)
问题是以下代码仍然返回整个 data.table,而没有减少到 g 的唯一值。
cn <- paste0('s', 'a')
# returns all rows
dt[, (cn) := mean(xa), by = g][]
g xa xb sa
1: 1 0.3423699 0.81447505 0.4755900
2: 2 0.0932055 0.06853225 0.5372602
3: 3 0.2486223 0.13286546 0.6465111
4: 1 0.6942175 0.66405944 0.4755900 …Run Code Online (Sandbox Code Playgroud) 我想根据多个条件改变列。例如,对于最大值为 5 并且列名称包含“xy”的每一列,应用一个函数。
df <- data.frame(
xx1 = c(0, 1, 2),
xy1 = c(0, 5, 10),
xx2 = c(0, 1, 2),
xy2 = c(0, 5, 10)
)
> df
xx1 xy1 xx2 xy2
1 0 0 0 0
2 1 5 1 5
3 2 10 2 10
df2 <- df %>% mutate_if(~max(.)==10, as.character)
> str(df2)
'data.frame': 3 obs. of 4 variables:
$ xx1: num 0 1 2
$ xy1: chr "0" "5" "10"
$ xx2: num 0 1 2 …Run Code Online (Sandbox Code Playgroud) 我试图在使用webclient和下载字符串从网站下载的字符串中找到Mauricio的索引.但是,在网站上它包含一个外国人物Maurício.所以我在别处找到了一些代码
string ToASCII(string s)
{
return String.Join("",
s.Normalize(NormalizationForm.FormD)
.Where(c => char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark));
}
Run Code Online (Sandbox Code Playgroud)
转换外国字符.我测试了代码并且它可以工作.所以我遇到的问题是,当我下载字符串时,它会下载为MaurA-cio.我试过了两个
wc.Encoding = System.Text.Encoding.UTF8;
wc.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
也没有阻止它作为MaurA-cio下载.
(另外,我无法更改搜索,因为我从列表中获取搜索词).
我还能尝试什么?谢谢