小编nev*_*ome的帖子

R >4.1 语法:错误:管道的 RHS 调用不支持函数“function”

R 4.1.0著名地引入了(“基管道”)运算|>符和类似 Haskell 的 lambda 函数语法。

我认为可以将两者结合起来,如下所示:

c(1, 2, 3) |> \(x) 2 * x
Run Code Online (Sandbox Code Playgroud)

这对我来说失败了:

错误:管道的 RHS 调用不支持函数“function”

因此我认为这不是有效的语法?这有效:

c(1, 2, 3) |> (\(x) 2 * x)()
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式来链接管道和新的 lambda 函数?

syntax r

19
推荐指数
2
解决办法
6975
查看次数

如果从文件中读取,Parsec 将失败且没有错误

我编写了一个小的 parsec 解析器来从用户提供的输入字符串或输入文件中读取样本。如果输入作为分号分隔的字符串提供,它会在错误输入时正确失败并显示有用的错误消息:

> readUncalC14String "test1,7444,37;6800,36;testA,testB,2000,222;test3,7750,40"
*** Exception: Error in parsing dates from string: (line 1, column 29):
unexpected "t"
expecting digit
Run Code Online (Sandbox Code Playgroud)

但是对于inputFile.txt具有相同条目的输入文件,它会静默失败:

test1,7444,37
6800,36
testA,testB,2000,222
test3,7750,40
Run Code Online (Sandbox Code Playgroud)
> readUncalC14FromFile "inputFile.txt"
[UncalC14 "test1" 7444 37,UncalC14 "unknownSampleName" 6800 36]
Run Code Online (Sandbox Code Playgroud)

为什么会这样,我如何才能readUncalC14FromFile以有用的方式失败?

这是我的代码的最小子集:

import qualified Text.Parsec                    as P
import qualified Text.Parsec.String             as P

data UncalC14 = UncalC14 String Int Int deriving Show

readUncalC14FromFile :: FilePath -> IO [UncalC14]
readUncalC14FromFile uncalFile = do
    s <- readFile uncalFile
    case P.runParser uncalC14SepByNewline () …
Run Code Online (Sandbox Code Playgroud)

parsing haskell parsec

5
推荐指数
0
解决办法
48
查看次数

如何使我的概率密度类型成为 Monoid 的实例?

我有一种类型来描述校准后放射性碳日期概率分布。细节和背景对于这个问题并不重要:它归结为 中_calPDFDens每一年的一个概率值_calPDFCals

data CalPDF = CalPDF {
    -- | Sample identifier, e.g. a lab number
      _calPDFid :: String
    -- | Years calBCAD
    , _calPDFCals :: VU.Vector YearBCAD
    -- | Probability densities for each year in '_calPDFCals'
    , _calPDFDens :: VU.Vector Float
    }
Run Code Online (Sandbox Code Playgroud)

VUData.Vector.Unboxed

现在:通常的做法是对多个此类分布求和以得出总和概率分布。这意味着对 中的年份进行完全外部联接_calPDFCals,然后对 中的相应值求和_calPDFDens。我的实现如下:

sumPDFs :: CalPDF -> CalPDF -> CalPDF
sumPDFs = combinePDFs (+)

combinePDFs :: (Float -> Float -> Float) -> CalPDF …
Run Code Online (Sandbox Code Playgroud)

haskell monoids

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

覆盖图驱动程序不支持SELinux

当我安装docker并运行时,service docker start我收到此消息:

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
Run Code Online (Sandbox Code Playgroud)

我跑的时候journalctl -xe收到了这条消息:

8? 02 20:42:11 centos-master systemd[1]: Unit docker-storage-setup.service entered failed state.
8? 02 20:42:11 centos-master systemd[1]: docker-storage-setup.service failed.
8? 02 20:42:11 centos-master systemd[1]: Starting Docker Application Container Engine...
-- Subject: Unit docker.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit docker.service has begun starting up.
8? 02 …
Run Code Online (Sandbox Code Playgroud)

centos docker kubernetes kubectl

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

如何为自定义S3类实现提取/子设置([,[&lt;-,[[,[[&lt;-]函数?

我有一个自定义的S3类foo,它在常规的顶部添加了一些自定义行为data.frame

foo_object <- data.frame()
class(foo_object) <- c("foo", "data.frame")
Run Code Online (Sandbox Code Playgroud)

对于此类,还应该有一个列表类foo_list来存储许多这些foo对象。

foo_list_object <- list()
class(foo_list_object) <- c("foo_list", "list")
Run Code Online (Sandbox Code Playgroud)

如果通过这样对列表上的多个元素应用子集操作,则foo_list_object[c(1,2,3)]只会得到class的对象list。但是我希望它保持不变foo_list

Hadley 说,您应该为向量类实现自定义访问器函数,以实现此行为:

实现矢量类时,应实现以下方法:length,[,[<-,[[,[[<-,c。(如果[实现了rev,则头和尾都应该工作)。

我的问题包括三个部分:

  1. 为S3类实现自定义访问器功能的最佳方法是什么?我可以依靠基础原始类吗?
  2. 我需要哪种访问器功能?我想我并不需要定义[[[<-[[<-或者$因为在这些情况下的继承功能的list行为正确也foo_list。我还是应该实施它们吗?
  3. 如何实现带有3个参数(例如[<-或)的运算符[[<-?您需要对象,索引和新值吗?

以下代码[似乎有效:

`[.foo_list` <- function(x, i) {
  class(x) <- "list"
  as.foo_list(x[i])
}
Run Code Online (Sandbox Code Playgroud)

另一方面,这不会:

`[[<-.foo_list` <- function(x, i, y) {
  if (!is.foo(y)) {
    stop("Please provide …
Run Code Online (Sandbox Code Playgroud)

oop r

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

通过从C/C++替换R控制台中的输出来创建进度更新

是否可以使用R的C/C++打印功能覆盖R控制台输出?

Rcpp::sourceCpp( code = '
  #include <Rcpp.h>

  // [[Rcpp::export]]
  void print_test() {
    for(int i = 0; i < 10; i++) {
      std::stringstream strs;
      strs << "number: " << i;
      std::string temp_str = strs.str();
      char const* char_type = temp_str.c_str();      

      REprintf(char_type);
    }
  }'
)

print_test()
Run Code Online (Sandbox Code Playgroud)

这个函数的输出是

number: 0number: 1number: 2number: 3number: 4number: 5number: 6number: 7number: 8number: 9
Run Code Online (Sandbox Code Playgroud)

但我希望它是一个动态的序列.例如:

number: 0
Run Code Online (Sandbox Code Playgroud)

等几秒钟:

number: 1
Run Code Online (Sandbox Code Playgroud)

其中,number: 0完全从控制台删除.重复此过程直到number: 9达到.

我已经看到了这个问题,但是我无法使用回车解决方案来使用REprintf().

c++ r rcpp

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

标签 统计

r ×3

haskell ×2

c++ ×1

centos ×1

docker ×1

kubectl ×1

kubernetes ×1

monoids ×1

oop ×1

parsec ×1

parsing ×1

rcpp ×1

syntax ×1