小编drj*_*122的帖子

对长向量(超过 2^31 个元素)的稀疏矩阵支持

我知道这个问题过去曾被问过(例如,这里这里),但这些问题已经存在多年并且尚未解决。我想知道从那时起是否创建了任何解决方案。问题是 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。

memory r sparse-matrix xgboost

5
推荐指数
1
解决办法
1095
查看次数

R - 使用 dplyr 根据每列的分位数过滤每列

给定一个数据框,我想使用每列的分位数来过滤每列。我更喜欢使用 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)

我想要的结果将是 …

r dplyr

4
推荐指数
1
解决办法
5257
查看次数

将列表列表的维度组合到单独的向量中

这是我的数据的一个例子.

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的最终结果将是类似的 …

merge r list tidyverse

4
推荐指数
1
解决办法
60
查看次数

R data.table 使用变量名在 group by 中进行赋值

我正在尝试使用字符变量作为新列的名称以及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)

grouping r data.table

4
推荐指数
2
解决办法
141
查看次数

R - dplyr - mutate_if 多个条件

我想根据多个条件改变列。例如,对于最大值为 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)

r conditional-statements dplyr

3
推荐指数
1
解决办法
1万
查看次数

DownloadString和特殊字符

我试图在使用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下载.

(另外,我无法更改搜索,因为我从列表中获取搜索词).

我还能尝试什么?谢谢

c# webclient downloadstring

2
推荐指数
1
解决办法
2144
查看次数