我正在尝试将一个函数应用于数据框的每一行,并且在结果的末尾它也会打印最后一列......
我不确定为什么会这样。
df = data.frame(x = LETTERS[1:10], y = sample(1:5,10, replace = TRUE), z = sample(100:105, 10, replace = TRUE))
testprint = function (x){
print(x[[1]])
print(x[[2]])
print(x[[3]])
}
apply(df, 1, testprint)
结果:
[1] "A"
[1] "2"
[1] "105"
[1] "B"
[1] "1"
[1] "103"
[1] "C"
[1] "5"
[1] "102"
[1] "D"
[1] "1"
[1] "101"
[1] "E"
[1] "3"
[1] "105"
[1] "F"
[1] "1"
[1] "100"
[1] "G"
[1] "3"
[1] "103"
[1] "H"
[1] "2"
[1] "101"
[1] "I"
[1] "3"
[1] "100"
[1] "J"
[1] "1"
[1] "100"
[1] "105" "103" "102" "101" "105" "100" "103" "101" "100" "100"
答案 0 :(得分:1)
如果您没有使用apply
的返回值,我根本没有理由使用apply
。您似乎也没有使用print
的返回值,至少在您的示例中是这样。那么为什么不使用for
循环和cat
?
for(i in seq_len(nrow(df)))cat(t(df)[,i], sep="\n")
答案 1 :(得分:0)
来自help("function")
:
如果在没有调用return的情况下到达函数的结尾,则为该值 返回最后一个评估表达式。
您函数的最后一个评估表达式为print(x[[3]])
。
来自help("print")
:
print打印其参数并以不可见的方式返回它(通过不可见(x))。
并且apply
将向量中的返回值组合在一起,并返回并打印(因为您没有指定它)。