我正在尝试使用lapply
lapply(1:3, function(i) print(i))
# [1] 1
# [1] 2
# [1] 3
# [[1]]
# [1] 1
# [[2]]
# [1] 2
# [[3]]
# [1] 3
我了解lapply
应该能够针对print (i)
中的每个元素i
执行1:3
但为什么输出看起来像这样。
此外,当我使用unlist
时,我得到的输出如下
unlist(lapply(1:3, function(i) print(i)))
# [1] 1
# [1] 2
# [1] 3
# [1] 1 2 3
答案 0 :(得分:1)
lapply函数的描述如下:
“lapply返回一个与X相同长度的列表,其中每个元素都是将FUN应用于X的相应元素的结果。”
你的例子:
lapply(1:3, function(x) print(x))
打印对象x并返回长度为3的列表。
str(lapply(1:3, function(x) print(x)))
# [1] 1
# [1] 2
# [1] 3
# List of 3
# $ : int 1
# $ : int 2
# $ : int 3
如评论中所述,有几种方法可以避免这种情况:
1)使用隐形
lapply(1:3, function(x) invisible(x))
# [[1]]
# [1] 1
# [[2]]
# [1] 2
# [[3]]
# [1] 3
unlist(lapply(1:3, function(x) invisible(x)))
# [1] 1 2 3
2)没有在函数内部明确打印
unlist(lapply(1:3, function(x) x))
# [1] 1 2 3
3)将列表分配给对象:
l1 <- lapply(1:3, function(x) print(x))
unlist(l1)
# [1] 1 2 3