小编Tim*_*Tim的帖子

为什么使用purrr :: map而不是lapply?

我有什么理由可以使用

map(<list-like-object>, function(x) <do stuff>)
Run Code Online (Sandbox Code Playgroud)

代替

lapply(<list-like-object>, function(x) <do stuff>)
Run Code Online (Sandbox Code Playgroud)

输出应该是相同的,我做的基准似乎表明它lapply稍微快一些(它应该是map需要评估所有非标准评估输入).

那么有什么理由为什么这么简单的情况我应该考虑切换到purrr::map?我不是在这里问一个人对于语法,purrr等提供的其他功能的喜欢或不喜欢,而是严格地purrr::maplapply假设使用标准评估的比较,即map(<list-like-object>, function(x) <do stuff>).purrr::map在性能,异常处理等方面是否有任何优势?下面的评论表明它没有,但也许有人可以详细说明一点?

r purrr

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

使用R属性有什么危险?

将已使用定义的属性添加到R​​对象可以很容易地携带与感兴趣对象粘合在一起的一些附加信息.问题是它稍微改变了R看到对象的方式,例如具有附加属性的数字向量仍然是numericvector不再是:

x <- rnorm(100)
class(x)
## [1] "numeric"
is.numeric(x)
## [1] TRUE
is.vector(x)
## [1] TRUE
mode(x)
## [1] "numeric"
typeof(x)
## [1] "double"
attr(x, "foo") <- "this is my attribute"
class(x)
## [1] "numeric"
is.numeric(x)
## [1] TRUE
is.vector(x)
## [1] FALSE  # <-- here!
mode(x)
## [1] "numeric"
typeof(x)
## [1] "double"
Run Code Online (Sandbox Code Playgroud)

这会导致任何潜在的问题吗?我正在考虑的是向常见的R对象添加一些属性,然后将它们传递给其他方法.仅因为我在标准R对象中添加了额外属性(例如矢量,矩阵,数据帧等)这一事实,有什么东西可以破坏?

请注意,我不是要求创建自己的类.为简单起见,我们还可以假设属性名称中没有任何冲突(例如使用dims属性).让我们假设如果某些方法在某些方面会使我的属性失效,那就不是问题,这是一个可接受的风险.

r

13
推荐指数
1
解决办法
296
查看次数

我应该更喜欢Rcpp :: NumericVector而不是std :: vector吗?

是否有任何理由为什么我应该更喜欢Rcpp::NumericVectorstd::vector<double>

例如,下面的两个功能

// [[Rcpp::export]]
Rcpp::NumericVector foo(const Rcpp::NumericVector& x) {
  Rcpp::NumericVector tmp(x.length());
  for (int i = 0; i < x.length(); i++)
    tmp[i] = x[i] + 1.0;
  return tmp;
}

// [[Rcpp::export]]
std::vector<double> bar(const std::vector<double>& x) {
  std::vector<double> tmp(x.size());
  for (int i = 0; i < x.size(); i++)
    tmp[i] = x[i] + 1.0;
  return tmp;
}
Run Code Online (Sandbox Code Playgroud)

在考虑其工作和基准性能时是等效的.我知道Rcpp提供了糖和矢量化操作,但是如果只是将R的向量作为输入并将向量作为输出返回,那么我使用哪一个会有什么区别吗?std::vector<double>在与R交互时可以使用导致任何可能的问题吗?

c++ rcpp

11
推荐指数
2
解决办法
4457
查看次数

调整BaggingClassifier使用的分类器的参数

假设我想训练BaggingClassifier那种用途DecisionTreeClassifier:

dt = DecisionTreeClassifier(max_depth = 1)
bc = BaggingClassifier(dt, n_estimators = 500, max_samples = 0.5, max_features = 0.5)
bc = bc.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)

我想用GridSearchCV找到两者的最佳参数BaggingClassifierDecisionTreeClassifier(如max_depthDecisionTreeClassifiermax_samplesBaggingClassifier),究竟是什么语法?

python scikit-learn

9
推荐指数
2
解决办法
3642
查看次数

将numpy数组传递给Cython

我正在学习Cython.我有将numpy数组传递给Cython的问题,并且不太了解发生了什么.你可以帮帮我吗?

我有两个简单的数组:

a = np.array([1,2])
b = np.array([[1,4],[3,4]])
Run Code Online (Sandbox Code Playgroud)

我想计算它们的点积.在python/numpy一切正常:

>>> np.dot(a,b)
array([ 7, 12])
Run Code Online (Sandbox Code Playgroud)

我将代码翻译成Cython(如下所示:http://docs.cython.org/src/tutorial/numpy.html ):

import numpy as np
cimport numpy as np

DTYPE = np.int
ctypedef np.int_t DTYPE_t

def dot(np.ndarray a, np.ndarray b):
    cdef int d = np.dot(a, b)
    return d
Run Code Online (Sandbox Code Playgroud)

它编译没有问题但返回错误:

>>> dot(a,b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test.pyx", line 8, in test.dot (test.c:1262)
    cdef int d = np.dot(a, b)
TypeError: only length-1 arrays can be converted to …
Run Code Online (Sandbox Code Playgroud)

python numpy cython

6
推荐指数
1
解决办法
1117
查看次数

为什么ifelse()返回单值输出?

这两个功能应该给出类似的结果,不是吗?

f1 <- function(x, y) {
   if (missing(y)) {
      out <- x
   } else {
      out <- c(x, y)
   }
   return(out)
}

f2 <- function(x, y) ifelse(missing(y), x, c(x, y))
Run Code Online (Sandbox Code Playgroud)

结果:

> f1(1, 2)
[1] 1 2
> f2(1, 2)
[1] 1
Run Code Online (Sandbox Code Playgroud)

r

6
推荐指数
2
解决办法
2381
查看次数

强制测试忽略警告

我有一个测试包来检查可能会或可能不会返回警告的函数,例如:

test_that("test", {
  expect_true(is.na(log(NA)))
  expect_true(is.na(log(-1)))
})
Run Code Online (Sandbox Code Playgroud)

我对检查天气出现警告感兴趣.有没有一种方法,我怎么能告诉testthat忽略了警告,并且运行时不显示出来devtools::test()

我知道我可以打包每个功能expect_warning,或者suppressWarnings,但我喜欢做类似的事情

test_that("test", {  
  ignoreAllTheWarningsInside({
     expect_true(is.na(log(NA)))
     expect_true(is.na(log(-1)))
  })
})
Run Code Online (Sandbox Code Playgroud)

不幸的是options(warn = -1),这似乎也没有用.

r testthat

6
推荐指数
1
解决办法
613
查看次数

函数在Python中更改列表值而不是变量值

我们来看一个简单的代码:

y = [1,2,3]

def plusOne(y):
    for x in range(len(y)):
        y[x] += 1
    return y

print plusOne(y), y


a = 2

def plusOne2(a):
    a += 1
    return a

print plusOne2(a), a
Run Code Online (Sandbox Code Playgroud)

'y'的值发生变化但值'a'保持不变.我已经知道这是因为一个是可变的而另一个不是.但是如何更改代码以使函数不更改列表?

例如,要做类似的事情(为了简单起见,使用伪代码):

a = [1,2,3,...,n]

function doSomething(x):
    do stuff with x
    return x

b = doSomething(a)

if someOperation(a) > someOperation(b):
    do stuff
Run Code Online (Sandbox Code Playgroud)

编辑:抱歉,我在嵌套列表上另一个问题.看到这段代码:

def change(y):
    yN = y[:]
    for i in range(len(yN)):
        if yN[i][0] == 1:
            yN[i][0] = 0
        else:
            yN[i][0] = 1
    return yN …
Run Code Online (Sandbox Code Playgroud)

python variables function list nested-lists

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

SQL JOIN中的AND/OR语句

我有两张桌子:table1table2.我可以使用id1或加入他们id2.我更喜欢使用id1,但因为在某些行id1中缺少,所以我必须使用id2.以下语法是否正确:

SELECT *
FROM table1 as a

LEFT JOIN table2 as b
ON (a.id1 is not null and a.id1 = b.id1) or
   (a.id2 is not null and a.id2 = b.id2)
Run Code Online (Sandbox Code Playgroud)

它会返回一些结果,但我想确定它是否有效,因为我之前没有看过它.

有没有更好的方法来做到这一点?

sql postgresql

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

dplyr中的k折交叉验证?

Hadley Wickham提出可以使用dplyr包进行引导,他的建议得到了改进,然后broom包中实现.是否也可以实现k折交叉验证?

我想第一步(选择火车组)非常简单:

crossvalidate <- function (df, k = 5) {
  n <- nrow(df)
  idx <- sample(rep_len(1:k, n))
  attr(df, "indices") <- lapply(1:k, function(i) which(idx != i))
  attr(df, "drop") <- TRUE
  attr(df, "group_sizes") <- nrow(df) - unclass(table(idx))
  attr(df, "biggest_group_size") <- max(attr(df, "group_sizes"))
  attr(df, "labels") <- data.frame(replicate = 1:k)
  attr(df, "vars") <- list(quote(replicate))
  class(df) <- c("grouped_df", "tbl_df", "tbl", "data.frame")
  df
}
Run Code Online (Sandbox Code Playgroud)

但不知怎的,我无法找到任何attr(, "indices")可以学习的文档,如果它可能在某种程度上可以使用"其他那些"选择用于选择测试组索引的索引.你有什么想法?

r dplyr

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

标签 统计

r ×5

python ×3

c++ ×1

cython ×1

dplyr ×1

function ×1

list ×1

nested-lists ×1

numpy ×1

postgresql ×1

purrr ×1

rcpp ×1

scikit-learn ×1

sql ×1

testthat ×1

variables ×1