标签: sapply

函数作用于多个列表

我不使用那么多函数,但当我使用时,我倾向于使用匿名函数和某种形式的apply. 然而,我现在正在尝试编写一个可以处理列表中的项目的函数。

有两个列表,每个列表都有许多项目(我所说的项目是指例如mylist1[1])。所有项目都是数据框。我想从中获取第一个数据帧mylist1和第一个数据帧,mylist2并在这些数据帧中的列上运行一堆函数。然后取出第二mylist1项和第二mylist2项,依此类推......

下面是我习惯写的东西,但在这种情况下显然不适用于两个列表。任何人都可以帮我找到一种快速的方法来弄清楚我应该如何使用似乎sapply导致主要问题的方法以外的方法来解决这个问题。

a <- c(1:10)
b <- c(1:10)
z <- c(rep("x", 5), rep("y", 5))
df <- data.frame(cbind(a, b, z))
mylist1 <- split(df, z)
mylist2 <- split(df, z)

myfunction <- function(x, y) 
{

    a <- as.data.frame(x[1])
    b <- as.data.frame(y[1])
    meana <- mean(a[1])
    meanb <- mean(b[1])
    model <- lm(a[1]~b[1])
    return(c(model$coefficients[2], meana, meanb))
}

result <- sapply(mylist1, mylist2, myfunction)
Run Code Online (Sandbox Code Playgroud)

subset我还只是想人们是否认为这样做会zsplit这样做更好?

r list sapply

0
推荐指数
1
解决办法
268
查看次数

使用函数和sapply更新数据框

我试图在数据框中设置一个等于"US"或"Foreign"的列,具体取决于国家/地区.我认为这样做的正确方法是编写一个函数,然后用它sapply来实际更新数据帧.这是我第一次尝试过在这样的事情R-在SQL,我刚才写的UPDATE查询.

这是我的数据帧:

str(clients)
'data.frame':   252774 obs. of  4 variables:
 $ ClientID     : Factor w/ 252774 levels "58187855","59210128",..: 19 20 21 22 23 24 25 26 27 28 ...
 $ Country          : Factor w/ 207 levels "Afghanistan",..: 196 60 139 196 196 40 40 196 196 196 ...
 $ CountryType     : chr  "" "" "" "" ...
 $ OrderSize        : num  12.95 21.99 5.00 7.50 44.5 ...


head(clients)
       ClientID  Country       CountryType  OrderSize
1 …
Run Code Online (Sandbox Code Playgroud)

r sapply

0
推荐指数
1
解决办法
320
查看次数

如何在 sapply 函数中将列名称分配给矩阵?

我有以下过于简单的示例来演示我的问题。如何将列名称分配给通过 生成的单列矩阵sapply?我知道这适用于for循环,所以想知道我是否在这里遗漏了一些东西。感谢任何建议。

> names <- c("apple", "bear", "cat", "dog")
> x <- sapply(1:4, FUN=function(y){
     mat <- matrix(rnorm(10, mean=0, sd=2))
     colnames(mat) <- names[y]
     print(colnames(mat))
     return(mat)
 })
> x
          [,1]     [,2]    [,3]    [,4]
 [1,]  0.50453 -0.15463  2.3660 -0.1451
 [2,] -0.18460  2.01499 -1.4656  0.5702
 [3,]  0.41206 -0.94563 -0.5911  0.6568
 [4,] -0.01510  1.88728  2.2698  0.2722
 [5,] -0.67850 -0.48196  0.7322 -0.1656
 [6,]  3.88306  0.25590 -0.9625 -0.5595
 [7,]  0.09948 -0.48730  2.5696 -1.7280
 [8,]  0.38895 -0.07124 -2.0728  2.4206
 [9,] -1.23075  2.09420  1.3673  0.1967 …
Run Code Online (Sandbox Code Playgroud)

r apply sapply

0
推荐指数
1
解决办法
463
查看次数

如何在列表中获取具有相同名称的元素以避免R中的循环

我有一个简单的问题.假设我有一个长度为500的Obj列表

Obj[[1]], Obj[[2]], ....Obj[[500]], #for each Obj[[i]], it has an element 
Obj[[i]]$logL, 
Run Code Online (Sandbox Code Playgroud)

我的问题是如何提取每个Obj的logL以避免像这样的for循环?

logL = rep(NA, length(Obj))
for(i in 1: length(Obj)){
   logL[i] = Obj[[i]]$logL
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用sapply或像plyr这样的高级软件包来做到这一点?我对解决方案持开放态度,因为它比for循环更快,因为我需要在MCMC中执行此操作,并且列表的长度可以是3000,因此我更喜欢一些快速方法.

提前致谢!

r list sapply

0
推荐指数
1
解决办法
73
查看次数

重复矩阵中的值(R)

这是我正在使用的代码:

A <- matrix(1:9, nrow = 3)
A
cbind(A,A,A)
Run Code Online (Sandbox Code Playgroud)

这给出了一个输出:

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,]    1    4    7    1    4    7    1    4    7
[2,]    2    5    8    2    5    8    2    5    8
[3,]    3    6    9    3    6    9    3    6    9
Run Code Online (Sandbox Code Playgroud)

所需的输出是......

  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,]    1    1    1    4    4    4    7    7    7
[2,]    2    2    2    5    5    5    8    8    8
[3,] …
Run Code Online (Sandbox Code Playgroud)

r sapply rep cbind

0
推荐指数
1
解决办法
95
查看次数

提高模拟qbeta值的sapply函数的性能

我用这个sapply函数:

set.seed(1)
data<-matrix(runif(1000000,0,1),1000000,2)

sapply(seq(0.0025, 0.9975, by=0.005), function (x) qbeta(x, data$a, data$b))
Run Code Online (Sandbox Code Playgroud)

由于数据可以有1 mn行,因此可能需要很长时间.a和b是唯一的随机值.

如何提高性能?是从每一行中查找参数需要花费时间,还是只是不可避免?我已经尝试了并行版本,它减少了时间,但它仍然很慢.

一些结果(我在38k行上做了这个):

> system.time(matrix(qbeta(rep(seq(0.0025, 0.9975, by=0.005),each=nrow(data)),data$a, data$b),nrow=nrow(data)))
   user  system elapsed 
  34.53    0.00   34.53 
> system.time(sapply(seq(0.0025, 0.9975, by=0.005), function (x) qbeta(x, data$a, data$b)))
   user  system elapsed 
  34.22    0.00   34.21 
Run Code Online (Sandbox Code Playgroud)

这是我的并行代码:

steps<-seq(0.0025, 0.9975, by=0.005)

qbeta.func <- function(x, data) {
  return(qbeta(x, data$a, data$b) * data$value)
}

cl <- makeCluster(rep("localhost",4), type = "SOCK")
t1 <- Sys.time()
data <- parSapply(cl, steps, qbeta.func, data)#
stopCluster(cl)
#data <- data[1:20,1:20]
Run Code Online (Sandbox Code Playgroud)

performance r sapply

0
推荐指数
1
解决办法
93
查看次数

How does sapply() apply a function with undefined (with no default) parameters

The following code block taken from chernan's sample REST queries will apply FUN to a list of parameters, but "param_name" is not provided. How is this possible?

rcurl_request <- function(service_url, parameters) {

# Collapse all parameters into one string
all_parameters <- paste(
    sapply(names(parameters), 
           FUN=function(param_name, parameters) {
               paste(param_name, paste(parameters[[param_name]], collapse=','), collapse='', sep='=')
           }, 
           parameters),
    collapse="&")

# Paste base URL and parameters
requested_url <- paste0(service_url, all_parameters)

# Encode URL (in case there would be any space character for instance)
requested_url <- URLencode(requested_url) …
Run Code Online (Sandbox Code Playgroud)

rest r sapply

0
推荐指数
1
解决办法
435
查看次数

使用列方法将函数应用于矩阵中的所有列

我有一个矩阵m(由三列组成,每列由整数组成,平均值分别为5,10和15):

m <- round(matrix(data=cbind(rnorm(30, 5), rnorm(30, 10), rnorm(30, 15)), nrow=30, ncol=3), 0)

现在,我希望有一个与m相同尺寸的矩阵,其中每个值x计算为x减去找到x的列的平均值.如何才能做到这一点?我尝试过应用各种应用函数(具体来说,我一直在查看user3640617User60的两个问题),但问题似乎是我不能使用行的平均值作为参数sapply,lapply或者vapply......

示例:如果head(m)

     [,1] [,2] [,3]
[1,]    6   11   14
[2,]    6    8   16
[3,]    6   11   15
[4,]    6   10   17
[5,]    5    9   15
[6,]    3   10   15
Run Code Online (Sandbox Code Playgroud)

我想得到

     [,1] [,2] [,3]
[1,]    1    1   -1
[2,]    1   -2    1
[3,]    1    1    0
[4,]    1    0    2
[5,]    0   -1    0
[6,]   -2    0 …
Run Code Online (Sandbox Code Playgroud)

r apply lapply sapply

0
推荐指数
1
解决办法
79
查看次数

sapply(a, replica, b) 表达式在函数内不再起作用

这是我第一次在这里发帖。当我遇到错误(或错误)时,我通常会寻找替代方案,但是,由于我将在 R 中走得更远更深入,所以我很高兴了解正在发生的事情。

我做了一个简单的例子来重现错误:

简单的 R 代码

执行

因此,似乎“手动”, sapply(a,replicate,b) 确实有效。但是,函数内的该表达式会返回错误。我在网上搜索了大约 1 小时,但没有找到类似的东西。

我感谢你的时间,

r function replicate sapply

0
推荐指数
1
解决办法
152
查看次数

尽管 fo 在 R 中为 TRUE,但 is.null 仍返回 false

我有一个变量:

x$value
[[1]]
NULL
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时,is.null(x$value)我得到:

is.null(x$value)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

这怎么可能?我怎样才能解决这个问题?我在sum(sapply((data$iteration), FUN = function(x) {ifelse(is.null(x$value), 0, x$value)}), na.rm = TRUE)一个错误中使用它:

Error in sum(sapply((data$iteration), FUN = function(x) { : 
  invalid 'type' (list) of argument
Run Code Online (Sandbox Code Playgroud)

null r lapply sapply

0
推荐指数
1
解决办法
36
查看次数

来自不同箱柜的所有可能的元素组合(每个箱柜中的一个元件)

我有一个列表,其中每个元素都是一组数字.所有组的长度都不同:

 a <- list(1,c(2,3),c(4,5,6))
#> a
#[[1]]
#[1] 1

#[[2]]
#[1] 2 3

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

我想得到每组中一个元素的所有可能组合.在这个例子中它应该是:

1 2 4,1 2 5,1 2 6,1 3 4,1 3 5,1 3 6

我觉得*apply-functions的某些组合在这里很有用,但是无法弄清楚如何做到这一点.

r combinatorics lapply sapply

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

标签 统计

r ×11

sapply ×11

lapply ×3

apply ×2

list ×2

cbind ×1

combinatorics ×1

function ×1

null ×1

performance ×1

rep ×1

replicate ×1

rest ×1