标签: sapply

美元运算符作为函数参数,因为sapply没有按预期工作

我有以下清单

test_list=list(list(a=1,b=2),list(a=3,b=4))
Run Code Online (Sandbox Code Playgroud)

我想用列表元素名称提取所有元素a.

我可以通过这样做

sapply(test_list,`[[`,"a")
Run Code Online (Sandbox Code Playgroud)

这给了我正确的结果

#[1] 1 3
Run Code Online (Sandbox Code Playgroud)

当我尝试使用Rs美元运算符时$,我得到了NULL

sapply(test_list,`$`,"a")
#[[1]]
#NULL
#
#[[2]]
#NULL
Run Code Online (Sandbox Code Playgroud)

但是,如果我在单个元素上使用它,test_list它会按预期工作

`$`(test_list[[1]],"a")
#[1] 1
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗?

r dollar-sign lapply sapply

13
推荐指数
2
解决办法
1002
查看次数

将列表列表转换为字符向量

我有一个字符列表列表.例如:

l <- list(list("A"),list("B"),list("C","D"))
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到一些元素是长度> 1的列表.

我想将此列表列表转换为字符向量,但我希望长度> 1的列表在字符向量中显示为单个元素.

unlist功能并没有做到这一点,而是:

> unlist(l)
[1] "A" "B" "C" "D"
Run Code Online (Sandbox Code Playgroud)

还有什么比:

sapply(l,function(x) paste(unlist(x),collapse=""))
Run Code Online (Sandbox Code Playgroud)

为了得到我想要的结果:

"A"  "B"  "CD"
Run Code Online (Sandbox Code Playgroud)

string r list character sapply

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

R:循环遍历data.table中的列

我想确定一个大型data.table的列类.

colClasses <- sapply(DT, FUN=function(x)class(x)[1])
Run Code Online (Sandbox Code Playgroud)

有效,但显然本地副本存储在内存中:

> memory.size()
[1] 687.59
> colClasses <- sapply(DT, class)
> memory.size()
[1] 1346.21
Run Code Online (Sandbox Code Playgroud)

循环似乎不可能,因为data.table"with = FALSE"总是产生data.table.

一种快速而又非常脏的方法是:

DT1 <- DT[1, ]
colClasses <- sapply(DT1, FUN=function(x)class(x)[1])
Run Code Online (Sandbox Code Playgroud)

最优雅,最有效的方法是什么?

r sapply data.table

10
推荐指数
1
解决办法
2813
查看次数

R:在特定列上应用函数,保留数据帧的其余部分

我想学习如何在我的数据帧的特定列上应用函数,而不"排除"我的df中的其他列.例如,我想将一些特定列乘以1000,并保留其他列.

使用sapply函数,例如:

    a<-as.data.frame(sapply(table.xy[,1], function(x){x*1000}))
Run Code Online (Sandbox Code Playgroud)

我得到新的数据帧,第一列乘以1000,但没有我在操作中没有使用的其他列.所以我的尝试就是这样做:

    a<-as.data.frame(sapply(table.xy, function(x) if (colnames=="columnA") {x/1000} else {x}))
Run Code Online (Sandbox Code Playgroud)

但是这个没用.

我的解决方法是为两个数据帧提供另一行ID,然后将旧数据框与新创建的数据框合并以获得完整的数据帧.但我认为必须有更好的解决方案.不是吗?

r dataframe sapply

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

使用replicate()或sapply()重复用户定义的函数

我定义了一个自定义函数,如下所示:

my.fun = function() {

      for (i in 1:1000) {
      ...
        for (j in 1:20) {
          ...
        }
      }

 return(output)

}
Run Code Online (Sandbox Code Playgroud)

返回一个输出矩阵,output由1000行和20列组成.

我需要做的是重复这个函数说5次并将五个output结果存储到一个全新的矩阵中,比如说final,但不使用另一个for循环(这样可以使代码更清晰,也是因为在第二个时刻我我想尝试并行化这些额外的5次重复).

因此final应该是一个包含5000行和20列的矩阵(这5次重复的基本原理是在我使用的两个for循环中,以及其他函数中sample).

我尝试使用final <- replicate(5, my.fun()),正确计算了五个重复,但后来我必须"手动"将元素放入一个全新的5000 x 20矩阵中......有更好的方式吗?(也许用sapply()?).非常感谢

r replicate sapply

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

apply,sapply和lappy返回NULL

我有一个矩阵:

mat <- matrix(c(0,0,0,0,1,1,1,1,-1,-1,-1,-1), ncol = 4 , nrow = 4)
Run Code Online (Sandbox Code Playgroud)

并且我应用以下函数来过滤掉只有正条目的列,但是对于具有负条目的列,我得到了一个NULL.如何NULL从输出中抑制s lapply,applysapply

> lapply(as.data.frame(mat), function(x) { if( all(x >= 0) ){return(x)} })
$V1
[1] 0 0 0 0

$V2
[1] 1 1 1 1

$V3
NULL

$V4
[1] 0 0 0 0

> sapply(as.data.frame(mat), function(x) { if( all(x >= 0) ){return(x)} })
$V1
[1] 0 0 0 0

$V2
[1] 1 1 1 1

$V3
NULL

$V4
[1] 0 0 …
Run Code Online (Sandbox Code Playgroud)

r apply lapply sapply

10
推荐指数
2
解决办法
1863
查看次数

在R dplyr中为什么我需要在count()之后取消组合()?

当我第一次开始在RI中编程时,通常会使用dplyr count().

library(tidyverse)    
mtcars %>% count(cyl)
Run Code Online (Sandbox Code Playgroud)

一旦我开始使用apply函数,我开始遇到count()的问题.如果我简单地将ungroup()添加到我的计数结束(),那么问题就会消失.

我没有任何特别的可复制品来展示.但有人可以解释问题可能是什么,为什么ungroup()总是修复它,并且在每次count()之后或者在任何group_by()之后一直使用ungroup()有任何缺点吗?当然,我假设我不再需要在计算或汇总后对数据进行分组.

mtcars %>% count(cyl) %>% ungroup()
Run Code Online (Sandbox Code Playgroud)

group-by r lapply sapply dplyr

10
推荐指数
1
解决办法
1177
查看次数

如何计算文本中的单词数(字符串)?

我有这个字符串向量(例如):

str <- c("this is a string current trey",
    "feather rtttt",
    "tusla",
    "laq")
Run Code Online (Sandbox Code Playgroud)

为了计算这个向量中的单词数,我使用了这个(这里给出的数字计算R中字符串中的单词数量,这可能是重复但有另一个问题)

No_words <- sapply(gregexpr("\\W+", str), length) + 1
Run Code Online (Sandbox Code Playgroud)

但它回来了

6 2 2 2
Run Code Online (Sandbox Code Playgroud)

String在最后两个位置只有1个元素(即"tusla""laq")

所以应该回来

6 2 1 1
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

regex r apply sapply

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

使用R中的任何NA查看所有列名称

我需要获取至少有1个NA的列的名称.

df<-data.frame(a=1:3,b=c(NA,8,6), c=c('t',NA,7))
Run Code Online (Sandbox Code Playgroud)

我需要得到"b,c".

我找到了这段代码:

sapply(df, function(x) any(is.na(x)))
Run Code Online (Sandbox Code Playgroud)

但我只需要有任何NA的变量.

我试过这个:

sapply(df, function(x) colnames(df[,any(is.na(x))]))
Run Code Online (Sandbox Code Playgroud)

但我得到了所有的列名.

r sapply

8
推荐指数
4
解决办法
3759
查看次数

存在和流行:为什么这些功能不同?

为什么两个功能fngn以下不同?我不认为他们应该,但我必须遗漏一些东西.

vars <- letters[1:10]
a <- b <- 1
fn <- function (d) {
    sapply( vars, exists )
}
gn <- function (d) {
    sapply( vars, function (x) { exists(x) } )
}
fn(d=2)
#    a     b     c     d     e     f     g     h     i     j 
# TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE 
gn(d=2)
#    a     b     c     d     e     f     g     h     i     j 
# TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE …
Run Code Online (Sandbox Code Playgroud)

scope r sapply

8
推荐指数
1
解决办法
156
查看次数

标签 统计

r ×10

sapply ×10

lapply ×3

apply ×2

character ×1

data.table ×1

dataframe ×1

dollar-sign ×1

dplyr ×1

group-by ×1

list ×1

regex ×1

replicate ×1

scope ×1

string ×1