标签: sapply

在POSIXct的向量上使用sapply

我有一个可能是一个非常简单的问题.我想从数据帧处理一列POSIXct对象并生成一个datetime字符串向量.我尝试使用以下sapply调用

dt <- sapply(df$datetime, function(x) format(x,"%Y-%m-%dT%H:%M:%S"))
Run Code Online (Sandbox Code Playgroud)

但无济于事.我一直收到以下错误:

> Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L,  :
invalid 'trim' argument
Run Code Online (Sandbox Code Playgroud)

当我将此函数应用于列中的单个POSIXct对象时,我没有问题.关于问题是什么,我现在很难过.我是否需要对POSIXct对象做一些特别的事情?

r posixct sapply

7
推荐指数
1
解决办法
2880
查看次数

加速在R中使用其中的功能

我有两个矢量eg.我想知道每个元素中元素e的百分比g是否较小.在R中实现这一点的一种方法是:

set.seed(21)
e <- rnorm(1e4)
g <- rnorm(1e4)
mf <- function(p,v) {100*length(which(v<=p))/length(v)}
mf.out <- sapply(X=e, FUN=mf, v=g)
Run Code Online (Sandbox Code Playgroud)

使用大型e或者g,这需要花费大量时间来运行.如何更改或修改此代码以使其运行更快?

注意:mf上面的函数基于messdismo包中函数的代码.

r which sapply

7
推荐指数
1
解决办法
243
查看次数

使用自定义函数(if语句系列)

我想运行一个查看两个向量的函数,根据两个向量中值的符号返回不同的值.我编写了一个函数来比较两个值,但后来我想在两个向量上运行它.所以我使用了sapply,但是我得到的结果与预期不同.

bear.correction<-  function(x,y){
                                if(x > 0 && y < 0){
                                  return(90)
                                }else if(x < 0 && y < 0){
                                  return(180)
                                }else  if(x < 0 && y > 0){
                                  return(270)
                                }else   return(0)
                              }
Run Code Online (Sandbox Code Playgroud)

以下给出了预期的(和期望的)结果:

  bear.correction(1,-1)
  bear.correction(1,1)
  bear.correction(-1,1)
  bear.correction(-1,-1)
Run Code Online (Sandbox Code Playgroud)

结果:90,0,270,180

然而,当我尝试进行相同的比较,但使用带有sapply的向量时,我得到了不同的结果:

  x <- c(1,1,-1,-1)
  y <- c(-1,1,1,-1)
  sapply(x,bear.correction,y)
Run Code Online (Sandbox Code Playgroud)

结果:90,90,180,180.

我看不出有什么不对,所以请帮忙!

r apply lapply sapply

7
推荐指数
2
解决办法
8960
查看次数

从strsplit-R之后的嵌套列表中提取第n个元素

我一直在努力了解如何strsplit更好地处理输出.我经常有这样的数据,我想分开:

mydata <- c("144/4/5", "154/2", "146/3/5", "142", "143/4", "DNB", "90")

#[1] "144/4/5" "154/2"   "146/3/5" "142"     "143/4"   "DNB"     "90"     
Run Code Online (Sandbox Code Playgroud)

拆分后,结果如下:

strsplit(mydata, "/")

#[[1]]
#[1] "144" "4"   "5"  

#[[2]]
#[1] "154" "2"  

#[[3]]
#[1] "146" "3"   "5"  

#[[4]]
#[1] "142"

#[[5]]
#[1] "143" "4"  

#[[6]]
#[1] "DNB"

#[[7]]
#[1] "90"
Run Code Online (Sandbox Code Playgroud)

我从strsplit帮助指南中知道最终的空字符串不会产生.因此,根据要拆分的"/"数,我的每个结果中都会有1,2或3个元素

获得第一个元素非常简单:

sapply(strsplit(mydata, "/"), "[[", 1)

#[1] "144" "154" "146" "142" "143" "DNB" "90" 
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何获得第2,第3 ......当每个结果中存在这些不等数量的元素时.

sapply(strsplit(mydata, "/"), "[[", 2)

# Error in FUN(X[[4L]], ...) : subscript out of bounds …
Run Code Online (Sandbox Code Playgroud)

r strsplit sapply

7
推荐指数
1
解决办法
5250
查看次数

在R中为多因子列创建频率表

我是R的新手.我正在编写一本关于我工作的常用功能/特性的语法的单独手册.我的示例数据框如下:

x.sample <-
structure(list(Q9_A = structure(c(5L, 3L, 5L, 3L, 5L, 3L, 1L, 
5L, 5L, 5L), .Label = c("Impt", "Neutral", "Not Impt at all", 
"Somewhat Impt", "Very Impt"), class = "factor"), Q9_B = structure(c(5L, 
5L, 5L, 3L, 5L, 5L, 3L, 5L, 3L, 3L), .Label = c("Impt", "Neutral", 
"Not Impt at all", "Somewhat Impt", "Very Impt"), class = "factor"), 
Q9_C = structure(c(3L, 5L, 5L, 3L, 5L, 5L, 3L, 5L, 5L, 3L
), .Label = c("Impt", "Neutral", "Not Impt at all", "Somewhat Impt", …
Run Code Online (Sandbox Code Playgroud)

r sapply r-factor

7
推荐指数
3
解决办法
5156
查看次数

灵活应用

我在tmp目录中有一个.stat文件列表。

样品:

a.stat =>

abc,10

abc,20

abc,30
Run Code Online (Sandbox Code Playgroud)

b.stat =>

xyz,10

xyz,30

xyz,70
Run Code Online (Sandbox Code Playgroud)

等等

我需要找到所有.stat文件的摘要。目前我正在使用 filelist<-list.files(path="/tmp/",pattern=".stat")

data<-sapply(paste("/tmp/",filelist,sep=''), read.csv, header=FALSE)

但是,我需要对正在读取的所有文件应用摘要。或者只是在n个.stat文件中,我需要第二列的摘要

使用

data<-sapply(paste("/tmp/",filelist,sep=''), summary, read.csv, header=FALSE) 不起作用,并给我带有班级角色的摘要,这不是我想要的。

sapply(filelist, function(filename){df <- read.csv(filename, header=F);print(summary(df[,2]))})工作正常。但是,我的总体目标是找到两边(异常值)相差超过2个标准偏差的值。因此,我使用sd,但同时需要检查当前读取的文件中的所有值是否都在2SD范围内。

r sapply

7
推荐指数
2
解决办法
6201
查看次数

当iterable不是函数的第一个参数时

问题很简单但我找不到答案.

我有myfun <- function(x, y).我怎么能把sapply这个功能列在一个列表上y

要申请,x我会这样做

iterables <- 1:10
sapply(iterables, myfun, y)
Run Code Online (Sandbox Code Playgroud)

但我希望迭代变为y.

r apply sapply

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

R:检查矩阵的每个列中的向量的每个元素的存在的最快方式

我有一个整数向量 a

a=function(l) as.integer(runif(l,1,600))
a(100)
  [1] 414 476   6  58  74  76  45 359 482 340 103 575 494 323  74 347 157 503 385 518 547 192 149 222 152  67 497 588 388 140 457 429 353
 [34] 484  91 310 394 122 302 158 405  43 300 439 173 375 218 357  98 196 260 588 499 230  22 369  36 291 221 358 296 206  96 439 423 281
 [67] 581 127 178 330 403  91 …
Run Code Online (Sandbox Code Playgroud)

r matrix apply sapply rcpp

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

vapply()可以与可变长度的FUN.VALUE一起使用吗?

我正在尝试遵循良好的做法并使用它vapply()而不是sapply()内部函数,但是vapply()在想要固定长度时发现类型检查过于僵硬。

假设我想要这样的东西:

list1 <- list(l1_one = 1:3, l1_two = letters[1:3])
list2 <- list(l2_one = 4:6, l2_two = letters[4:6], l2_three = 10:12)
list_12 <- list(list1, list2)

sapply(list_12, names)
# [[1]]
# [1] "l1_one" "l1_two"
# 
# [[2]]
# [1] "l2_one"   "l2_two"   "l2_three"
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以允许可变长度,但是要检查返回值是否为“字符”模式,并且长度至少为一个?显然这不起作用:

vapply(list_12, names, character(2))
# Error in vapply(list_12, names, character(2)) : values must be length 2,
# but FUN(X[[2]]) result is length 3
Run Code Online (Sandbox Code Playgroud)

r sapply

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

R 在矩阵上使用 sapply 时保留列名和行名

已经有人提出一个问题,关于在此处apply应用、sapply等时如何将列名保留在矩阵中。但我没有找到如何保留矩阵的列名和行名。

下面是一个例子:

mat = matrix(c(as.character(1:4)), nrow = 2)
colnames(mat) = c( 'col1', 'col2' )
rownames(mat) = c( 'row1', 'row2' )
mat = apply(mat,  2,  function(x) as.numeric(paste(x)))
colnames(mat)
rownames(mat)
Run Code Online (Sandbox Code Playgroud)

提前致谢 :-)

r matrix apply dataframe sapply

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

标签 统计

r ×10

sapply ×10

apply ×4

matrix ×2

dataframe ×1

lapply ×1

posixct ×1

r-factor ×1

rcpp ×1

strsplit ×1

which ×1