R-将多个函数按元素重叠在一起
在R中,当我在R-将多个函数按元素重叠在一起,r,lapply,R,Lapply,在R中,当我在lappy中运行两个函数时,它会在整个列表中运行第一个函数,然后在列表中运行第二个函数。在移动到第二个元素之前,是否可以强制它在列表的第一个元素上运行两个函数 我正在使用函数print和nchar,用于说明——我编写了生成data.frame的更复杂的函数 lapply(c("a","bb","cdd"), function(x) { print(x) nchar(x) }) 输出将是 [1] "a" [1] "bb" [1] "cdd" [[1]] [1
lappy
中运行两个函数时,它会在整个列表中运行第一个函数,然后在列表中运行第二个函数。在移动到第二个元素之前,是否可以强制它在列表的第一个元素上运行两个函数
我正在使用函数print
和nchar
,用于说明——我编写了生成data.frame的更复杂的函数
lapply(c("a","bb","cdd"), function(x) {
print(x)
nchar(x)
})
输出将是
[1] "a"
[1] "bb"
[1] "cdd"
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
我想要这样的东西:
[[1]]
[1] "a"
[1] 1
[[2]]
[1] "bb"
[1] 2
[[3]]
[1] "cdd"
[1] 3
这可能吗
Juan Antonio Roladan Diaz和cash2都建议使用列表
,哪种作品:
lapply(c("a","bb","cdd"), function(x) {
list(x, nchar(x))
})
[[1]]
[[1]][[1]]
[1] "a"
[[1]][[2]]
[1] 1
[[2]]
[[2]][[1]]
[1] "bb"
[[2]][[2]]
[1] 2
[[3]]
[[3]][[1]]
[1] "cdd"
[[3]][[2]]
[1] 3
但它有点太乱了
使用打印可以获得更好的结果
lapply(c("a","bb","cdd"), function(x) {
print(x)
print(nchar(x))
})
[1] "a"
[1] 1
[1] "bb"
[1] 2
[1] "cdd"
[1] 3
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
但是有没有办法禁止再次打印出
nchar
?这是因为函数打印x,然后返回nchar(x)
;返回的元素由lappy
放入一个列表中并返回,然后打印在REPL上
将
nchar(x)
替换为print(nchar(x))
。或者,如果希望返回列表,只需从内部函数返回list(x,nchar(x))
。您可以得到类似的结果:lappy(c(“a”,“bb”,“cdd”),函数(x)list(x,nchar(x));lapply(c(“a”、“bb”、“cdd”),函数(x)c(x,nchar(x))
nchar
是矢量化的。也许您根本不需要lappy
。@mt1022,谢谢,但nchar仅用于说明目的。。。我有一个生成矩阵的函数…@juanantoniroldánDíaz,谢谢,list有效,c无效,但是输出非常笨拙。。。我现在稍微修改一下我的问题…试试这个:不可见(lappy(c(“a”,“bb”,“cdd”),函数(x){print(x)print(nchar(x))}),它们都有效,谢谢!想知道是否有更清洁的解决方案。如果没有更干净的输出,那么编写另一个函数来合并这两个函数似乎是最好的方法。。。
invisible(lapply(c("a","bb","cdd"), function(x) { print(x); print(nchar(x)) }))