相关疑难解决方法(0)

在lapply函数中访问和保留列表名称

我需要访问lapply函数中的列表名称.我在网上发现了一些线程,据说我应该遍历列表的名称,以便能够获取我的函数中的每个列表元素名称:

> n = names(mylist)
> mynewlist = lapply(n, function(nameindex, mylist) { return(mylist[[nameindex]]) }, mylist)
> names(mynewlist)
NULL
> names(mynewlist) = n
Run Code Online (Sandbox Code Playgroud)

问题是mynewlist丢失了原始的mylist索引,我必须添加last names()赋值来恢复它们.

有没有办法为lapply函数返回的每个元素提供显式索引名称?或者以不同的方式确保mynewlist元素具有正确的索引名称集?如果lapply没有以与mylist相同的顺序返回列表元素,我觉得mynewlist索引名称可能是错误的.

r names lapply

51
推荐指数
5
解决办法
4万
查看次数

在lapply?deparse(substitute(x))?

我想使用一个使用标准deparse(substitute(x))技巧的函数lapply.不幸的是,我只是得到了循环的论证.这是我完全没用的可重复的例子:

# some test data
a <- 5
b <- 6 
li <- list(a1=a,b2=b)

# my test function
tf <- function(obj){
nm <- deparse(substitute(obj))
res <- list(myName=nm)
res
}

tf(a)
#returns
$myName
[1] "a"
Run Code Online (Sandbox Code Playgroud)

这很好.如果我使用lapply我得到[[1L]]x匿名函数的参数.

lapply(li,function(x) tf(x))
# returns
$a1
$a1$myName
[1] "x"


$b2
$b2$myName
[1] "x"
Run Code Online (Sandbox Code Playgroud)

有没有办法获得以下?

$a1
$a1$myName
[1] "a1"


$b2
$b2$myName
[1] "b1"
Run Code Online (Sandbox Code Playgroud)

如果有更一般的东西deparse(substitute(x)),lapply我也渴望知道.

编辑:问题,而不是使用接受多个参数的匿名函数,因此可以使用对象的名称和对象本身不起作用,因为该tf函数只接受一个参数.所以在这里不起作用......

r substitution lapply

19
推荐指数
1
解决办法
3799
查看次数

如何使用lapply()获取列表中每个元素的名称?

想象一下,我有以下列表

> test <- list("a" = 1, "b" = 2)
Run Code Online (Sandbox Code Playgroud)

列表的每个元素都有一个名称:

> names(test)
Run Code Online (Sandbox Code Playgroud)

现在,我想使用提取该名称,lapply()因为我想在一个将使用lapply调用的新函数中使用它.我只是不知道如何提取每个元素的名称.

我已经尝试使用deparse()substitute(),但结果是怪异:

> lapply(test, function(x) {deparse(substitute(x))})
$a
[1] "X[[i]]"

$b
[1] "X[[i]]"
Run Code Online (Sandbox Code Playgroud)

有人有线索吗?

精度:

我想做这样的事情:我有一个类似于测试的列表:

> test <- list("a" = matrix(1, ncol = 3), "b" = matrix(2, ncol = 3))
Run Code Online (Sandbox Code Playgroud)

我想将一个函数应用于该列表,该函数转换每个元素中的数据并为每列提供特定的名称:

make_df <- function(x) {
  output <- data.frame(x)
  names(output) <- c("items", "type", NAME_OF_X)
  return(output)
}
lapply(test, make_df)
Run Code Online (Sandbox Code Playgroud)

预期的产出是:

> test
$a
     [,1] [,2] [,3]
[1,]    1    1    1
attr(,"names")
[1] "index" …
Run Code Online (Sandbox Code Playgroud)

r lapply

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

使用snowfall :: sfLapply时正在处理哪个列表元素?

假设我们有一个list(mylist)用作lapply函数的输入对象.有没有办法知道mylist正在评估哪个元素?该方法应该起作用,lapply并且snowfall::sfApply(也可能是其他人也适用于家庭成员).

聊天时,Gavin Simpson提出了以下方法.这很有用,lapply但不是很重要sfApply.我想避免额外的包或摆弄列表.有什么建议?

mylist <- list(a = 1:10, b = 1:10)
foo <- function(x) {
    deparse(substitute(x))
}
bar <- lapply(mylist, FUN = foo)

> bar
$a
[1] "X[[1L]]"

$b
[1] "X[[2L]]"
Run Code Online (Sandbox Code Playgroud)

这是没有削减它的并行版本.

library(snowfall)
sfInit(parallel = TRUE, cpus = 2, type = "SOCK") # I use 2 cores

sfExport("foo", "mylist")
bar.para <- sfLapply(x = mylist, fun = foo)

> bar.para
$a
[1] "X[[1L]]"

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

parallel-processing r list apply lapply

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

为什么在重复调用lapply后,闭包中的变量值会丢失?

我正在尝试使用一系列lapply调用来构建curried函数列表,理想情况下,在最后一次lapply调用时,返回最终的期望值.currying工作,但lapply似乎总是应用第二个应用程序后列表中的最后一个元素.

例:

curry <- function(fn, ...) {
  arglist <- list(...)
  function(...) {
    do.call(fn, append(arglist, list(...)))
  }
}
# rcurry is used only to init the first lapply.
rcurry <- function(v1, fn, ...) {
  arglist <- append(list(v1), list(...))
  function(...) {
    do.call(fn, append(arglist, list(...)))
  }
}

myadd <- function(a,b,c) {
  a+b+c
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作:

# you can achieve the same by closure:
# curry.a <- lapply(c(10, 1000), FUN = function(a) { curry(myadd, a) })
curry.a <- lapply(list(10, …
Run Code Online (Sandbox Code Playgroud)

closures scope r currying lapply

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

如何在lapply期间将ggplot x-label设置为等于变量名称?

我正在绘制一个 y 变量与多个 x 变量的关系图。我有一个使用 lapply 的工作解决方案。但是,我无法将 x 变量的名称写为每个图的 x 标签。这是我所拥有的一个简化示例:

目标是针对每个 x 变量绘制 y 变量,从而生成三个图,并将每个 x 变量的名称添加为 x 轴标签。

生成一个包含 1 个 y 变量和 3 个 x 变量的数据框:

df <- data.frame(y.variable=c(11:20), x1=c(21:30),x2=c(1:10),x3=c(31:40))
Run Code Online (Sandbox Code Playgroud)

一个应该以字符串形式检索变量名称的函数:

get_name <- function(v1) {deparse(substitute(v1))}
Run Code Online (Sandbox Code Playgroud)

生成 y 相对于 x 变量的图的函数:

generate_plot <- function(x.variable) {ggplot(data = df, aes(x.variable, y.variable )) +geom_point()  + xlab(get_name(variable.name))}
Run Code Online (Sandbox Code Playgroud)

调用 lapply 对 df 的每一列执行generate_plot:

lapply(df, generate_plot)
Run Code Online (Sandbox Code Playgroud)

这会产生三个图,每个图都将“variable.x”作为其 x 标签,而不是所需的变量名称 x1、x2 和 x3。

r ggplot2 lapply nse tidyeval

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

带索引的R lapply语句

有没有办法让la laly声明也显示索引?更具体地说,请考虑以下示例:

mylist <- list(c(5,4),c(3,2), c(1,3))

myfunction<- function(values){
  print("Adding values: ")
  return(values[1] + values[2])
}

lapply(mylist, myfunction)
Run Code Online (Sandbox Code Playgroud)

有没有办法让我可以以某种方式打印"添加值:1""添加值:2"等.列表中每个元素的一个元素?

谢谢!

r list lapply

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